Python“SyntaxError:非ASCII字符'\ xe2'在文件”

我正在写一些Python代码,并收到错误信息,如在标题中,从search这个字符集。

这是导致错误的行

hc = HealthCheck("instance_health", interval=15, target808="HTTP:8080/index.html") 

我无法弄清楚什么字符不在ANSI ASCII集? 此外,search“\ xe2”不会再提供关于出现的字符的信息。 该行中的哪个字符引起了这个问题?

我也看到了这个问题的一些修复,但我不确定使用哪个。 有人可以澄清是什么问题(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 

你有一个stream浪的字节浮动。 你可以通过运行find它

 with open("x.py") as fp: for i, line in enumerate(fp): if "\xe2" in line: print i, repr(line) 

你应该在那里用程序的名字replace"x.py" 。 你会看到行号和违规行。 例如,在任意插入该字节后,我得到:

 4 "\xe2 lb = conn.create_load_balancer('my_lb', ['us-east-1a', 'us-east-1b'],[(80, 8080, 'http'), (443, 8443, 'tcp')])\n" 

如果您只是试图使用UTF-8字符或不在乎它们是否在您的代码中,请将此行添加到.py文件的顶部

 # -*- coding: utf-8 -*- 

更改文件字符编码,

总是把下面的代码放到代码的最顶端

 # -*- coding: utf-8 -*- 

\ xe2是' – '字符,它出现在一些复制和粘贴它使用一个不同的同等看“ – ”,导致编码错误。 使用正确的“ – ”(从键盘button)replace“ – ”(从复制粘贴)。

我从网上复制和粘贴评论时发生同样的错误

对我而言,这是一个单引号(')

我刚刚删除它,重新键入它。

或者你可以简单地使用:

 # coding: utf-8 

在.py文件的顶部

我在我的评论中发现了这个字符错误(从网上复制/粘贴内容到我的编辑器中进行笔记)。

在文本牧马人解决:

  1. 突出显示文字
  2. 进入文本菜单
  3. select“转换为ASCII”

基于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> : 

我试图parsing这个奇怪的窗口apostraphe,并尝试了几件事情后,这是代码段的作品。

 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) 

经过堆栈溢出大概半个小时之后,我发现,如果在注释中使用单引号“'”将会出错:

 SyntaxError: Non-ASCII character '\xe2' in file 

看了回溯后,我能find我的评论中使用的单引号。

我有这个确切的问题运行下面的简单的.py代码:

 import sys print 'version is:', sys.version 

帝斯曼上面的代码提供了以下内容:

1'print \ xe2 \ x80 \ x98version是\ xe2 \ x80 \ x99,sys.version'

所以问题是我的文本编辑器使用SMART QUOTES,就像John Y所build议的那样。 更改文本编辑器设置并重新打开/保存文件后,它工作得很好。

当我阅读文本文件时,我有一个类似的问题,我使用…

 f = open('file','rt', errors='ignore') 

我有这个相同的问题解决scheme很简单。 如果你从网上复制了一些东西,如果有一个像(“, – ,”)这样的符号,只需用键盘上的键来代替它们,问题就会解决。