Python“语法错误:文件中的非 ASCII 字符‘\xe2’”[重复]
- 2025-03-13 09:01:00
- admin 原创
- 124
问题描述:
我正在编写一些 python 代码,并收到了如标题所示的错误消息,通过搜索发现这与字符集有关。
这是导致错误的行
hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
我无法弄清楚哪些字符不在 ANSI ASCII 集中?此外,搜索“â”无法提供任何有关该字符的信息。该行中的哪个字符导致了问题?
我也看到了一些针对此问题的修复方法,但我不知道该使用哪一个。有人能解释一下问题是什么吗(除非被告知,否则 python 不会解释 unicode?),以及我该如何正确解决它?
编辑:以下是错误附近的所有行
def createLoadBalancer():
conn = ELBConnection(creds.awsAccessKey, creds.awsSecretKey)
hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html")
lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])
lb.configure_health_check(hc)
return lb
解决方案 1:
.py
如果你只是想使用 UTF-8 字符,或者不关心它们是否在你的代码中,请将此行添加到文件顶部
# -*- coding: utf-8 -*-
解决方案 2:
你有一个零散的字节在四处浮动。你可以运行以下命令找到它
with open("x.py") as fp:
for i, line in enumerate(fp):
if "xe2" in line:
print i, repr(line)
您应该用程序名称替换其中"x.py"
的内容。您将看到行号和有问题的行。例如,在任意插入该字节后,我得到了:
4 "xe2 lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])
"
解决方案 3:
或者你也可以简单地使用:
# coding: utf-8
在 .py 文件顶部
解决方案 4:
â 是“-”字符,它出现在一些复制粘贴中,它使用不同的等号“-”,导致编码错误。将“-”(来自复制粘贴)替换为正确的“-”(来自键盘按钮)。
解决方案 5:
更改文件字符编码,
始终将下面的行放在代码顶部
# -*- coding: utf-8 -*-
解决方案 6:
我在从网上复制粘贴评论时也遇到了同样的错误
对我来说,这是单词中的一个单引号(')
我只是将其删除并重新输入。
解决方案 7:
在 .py 文件的第一行添加#coding=utf-8行将解决该问题。
请在以下链接中阅读有关该问题及其修复的更多信息,本文对问题及其解决方案进行了精彩的描述:https://www.python.org/dev/peps/pep-0263/
解决方案 8:
我的评论中的字符出现此错误(从网络上复制/粘贴内容到我的编辑器中用于做笔记)。
要在 Text Wrangler 中解决:
突出显示文本
进入文本菜单
选择“转换为 ASCII”
解决方案 9:
基于PEP 0263——定义 Python 源代码编码
Python will default to ASCII as standard encoding if no other
encoding hints are given.
To define a source code encoding, a magic comment must
be placed into the source files either as first or second
line in the file, such as:
# coding=<encoding name>
or (using formats recognized by popular editors)
#!/usr/bin/python
# -*- coding: <encoding name> -*-
or
#!/usr/bin/python
# vim: set fileencoding=<encoding name> :
解决方案 10:
我遇到了同样的问题,只是把它添加到我的文件顶部(在 Python 3 中我没有遇到这个问题,但在 Python 2 中遇到了
#!/usr/local/bin/python
# coding: latin-1
解决方案 11:
如果它对任何人有帮助,对我来说,这是因为我试图用我的python 2.7命令在python 3.4中运行Django实现
解决方案 12:
我的情况是 â 是一个’
应该被替换为的'
。
一般来说,我建议使用例如https://onlineasciitools.com/convert-utf8-to-ascii将 UTF-8 转换为 ASCII
但是如果你想保留 UTF-8,你可以使用
#-*- mode: python -*-
# -*- coding: utf-8 -*-
解决方案 13:
在大约半小时查看 stack overflow 之后,我突然意识到,如果在注释中使用单引号“ ' ”将会出现错误:
SyntaxError: Non-ASCII character 'xe2' in file
查看回溯后,我能够找到我的评论中使用的单引号。
解决方案 14:
我在运行下面简单的 .py 代码时遇到了这个确切的问题:
import sys
print 'version is:', sys.version
上面的DSM代码提供了以下内容:
1'打印âversion是â,系统版本'
所以问题在于我的文本编辑器使用了 SMART QUOTES,正如 John Y 所建议的那样。更改文本编辑器设置并重新打开/保存文件后,它就可以正常工作了。
解决方案 15:
我正在尝试解析那个奇怪的窗口撇号,在尝试了几种方法后,这里是有效的代码片段。
def convert_freaking_apostrophe(self,string):
try:
issuer_rename = string.decode('windows-1252')
except:
issuer_rename = string.decode('latin-1')
issuer_rename = issuer_rename.replace(u'’', u"'")
issuer_rename = issuer_rename.encode('ascii','ignore')
try:
os.rename(directory+"/"+issuer,directory+"/"+issuer_rename)
print "Successfully renamed "+issuer+" to "+issuer_rename
return issuer_rename
except:
pass
#HANDLING FOR FUNKY APOSTRAPHE
if re.search(r"([x90-xff])", issuer):
issuer = self.convert_freaking_apostrophe(issuer)
解决方案 16:
我使用 pycharm 修复了这个问题。在 pycharm 的底部,你可以看到文件编码。我注意到它是 UT-8。我把它改成了 US-ASCII
解决方案 17:
我遇到了同样的问题,但这是因为我直接复制并粘贴了字符串。后来当我手动输入字符串时,错误消失了。
我因为符号而出错-
。当我用手动输入替换它时,-
错误就解决了。
复制的字符串10 + 3 * 5/(16 − 4)
手动输入字符串10 + 3 * 5/(16 - 4)
您可以清楚地看到两个连字符之间存在一些差异。
我认为这是因为不同的操作系统或只是不同的软件使用的格式不同。
解决方案 18:
对我来说,问题是由于引号中的“'”符号引起的。由于我从 pdf 文件中复制了代码,所以导致了这个错误。我只是用这个“'”替换了“'”。
解决方案 19:
如果您想知道是什么字符导致了这个问题,只需将有问题的变量分配给一个字符串,然后在 iPython 控制台中打印它。
就我而言
In [1]: array = [[24.9, 50.5], [11.2, 51.0]] # Raises an error
In [2]: string = "[[24.9, 50.5], [11.2, 51.0]]" # Manually paste the above array here
In [3]: string
Out [3]: '[[24.9, 50.5]xe2x80x8b, [11.2, 51.0]]' # Here they are!
解决方案 20:
对我来说,问题是由于我将代码输入 Mac Notes,然后从 Mac Notes 复制并粘贴到我的 vim 会话中以创建文件而引起的。这使我的单引号变成了弯曲类型。为了解决这个问题,我在 vim 中打开了我的文件,并将所有弯曲的单引号替换为直的,只需删除并重新输入相同的字符即可。正是 Mac Notes 使相同的按键产生了弯曲的单引号。
解决方案 21:
我找了很久都没找到问题所在,后来我意识到我从网上复制了一行“UTC-12:00”,而这行中的连字符/破折号导致了问题。我只需再次输入这个“-”,问题就解决了。
因此,有时复制粘贴的行也会出现错误。在这种情况下,只需重写复制粘贴的代码即可。重写后,看起来好像什么都没有改变,但错误会消失。
解决方案 22:
这里有很多好的解决方案。
其中没有一个真正解决的挑战是如何在视觉上识别某些难以发现但与其他纯 ASCII 字符相似的非 ASCII 字符。例如,短划线看起来几乎与连字符完全一样,而弯引号看起来很像直引号,具体取决于文本编辑器的字体。
这个单行命令可以在 Mac 或 Linux 上运行,它将删除 ASCII 可打印范围内的字符,并并排显示差异:
# assumes Bash shell; for Bourne shell (sh), rearrange as a pipe and
# give '-' as second argument to 'sdiff' instead
sdiff --suppress-common-lines script.py <(tr -cd '
-~' <script.py)
字符
、`和
`分别表示八进制的制表符、换行符和回车符;其余范围是可见的 ASCII 字符。(提示)
从该 SO 线程中收集到的另一个提示是使用由ASCII 可见范围内不存在的任何内容组成的逆字符类,并突出显示它:
grep --color '[^ -~]' script.py
这也应该可以很好地与 macOS / BSD 版本的 grep 配合使用。
解决方案 23:
当我在读取文本文件时遇到类似的问题时我使用......
f = open('file','rt', errors='ignore')
扫码咨询,免费领取项目管理大礼包!