问题:语法错误:函数返回“£”时文件中的非ASCII字符“ \ xa3”
说我有一个功能:
def NewFunction():
return '£'
我想打印一些在前面带有井号的东西,并且在我尝试运行该程序时打印出错误,并显示以下错误消息:
SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details
谁能告诉我如何在返回函数中加入井号吗?我基本上是在课堂上使用它,并且在'__str__'
包含磅符号的部分内。
回答 0
我建议阅读该错误给您的PEP。问题是您的代码试图使用ASCII编码,但是井号不是ASCII字符。尝试使用UTF-8编码。您可以# -*- coding: utf-8 -*-
先将.py文件放在顶部。为了更高级,您还可以在代码中逐个字符串定义编码。但是,如果您尝试将井字符号文字放入代码中,则需要一个支持整个文件的编码。
回答 1
在我的.py脚本顶部添加以下两行对我有用(第一行是必需的):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
回答 2
首先将# -*- coding: utf-8 -*-
行添加到文件的开头,然后u'foo'
用于所有非ASCII Unicode数据:
def NewFunction():
return u'£'
或使用自python 2.6以来可用的魔法使其自动执行:
from __future__ import unicode_literals
回答 3
错误消息会告诉您确切的问题。Python解释器需要知道非ASCII字符的编码。
如果要返回U + 00A3,则可以说
return u'\u00a3'
它通过Unicode转义序列以纯ASCII形式表示此字符。如果要返回包含文字字节0xA3的字节字符串,则为
return b'\xa3'
(在Python 2中b
是隐式的;但是显式的比隐式的要好)。
错误消息中链接的PEP指示您确切如何告诉Python“此文件不是纯ASCII;这是我正在使用的编码”。如果编码为UTF-8,则应为
# coding=utf-8
或与Emacs兼容
# -*- encoding: utf-8 -*-
如果您不知道编辑器使用哪种编码来保存此文件,请使用十六进制编辑器和某种谷歌搜索来检查它。堆栈溢出字符编码标签有一个标签信息页面,其中包含更多信息和一些故障排除提示。
用这么多的词来说,超出7位ASCII范围(0x00-0x7F)的地方,Python不能也不应该猜测字节序列代表什么字符串。https://tripleee.github.io/8bit#a3显示了字节0xA3的21种可能的解释,而这仅来自传统的8位编码;但也可能是多字节编码的第一个字节。但实际上,我想您实际上正在使用Latin-1,因此您应该
# coding: latin-1
作为源文件的第一行或第二行。无论如何,在不知道字节应该代表哪个字符的情况下,人类也将无法猜测。
警告:coding: latin-1
肯定会消除错误消息(因为没有字节序列在技术上不允许在此编码中使用),但是如果实际编码是其他内容,则在解释代码时可能会产生完全错误的结果。声明编码时,您确实必须完全确定地知道文件的编码。
回答 4
在脚本中添加以下两行为我解决了这个问题。
# !/usr/bin/python
# coding=utf-8
希望能帮助到你 !
回答 5
您可能正在尝试使用Python 2解释器运行Python 3文件。当前(截至2019年)python
,在Windows和大多数Linux发行版上,当两个版本都安装时,命令默认为Python 2。
但是,如果您确实正在使用Python 2脚本,则此页面上尚未提及的解决方案是将文件重新保存为UTF-8 + BOM编码,这会将三个特殊字节添加到文件的开头,它们将明确告知Python解释器(和您的文本编辑器)有关文件编码的信息。