我正在尝试用来string.replace('’','')替换可怕的怪异的单引号字符:'(又名\ xe2又名#8217).但是,当我运行该行代码时,我收到此错误:
SyntaxError: Non-ASCII character '\xe2' in file
Run Code Online (Sandbox Code Playgroud)
编辑:我尝试替换远程获取的CSV文件中的字符时出现此错误.
# encoding: utf-8
import urllib2
# read raw CSV data from URL
url = urllib2.urlopen('http://www.aaphoenix.org/meetings/aa_meetings.csv')
raw = url.read()
# replace bad characters
raw = raw.replace('’', "")
print(raw)
Run Code Online (Sandbox Code Playgroud)
即使在执行上述代码之后,打印结果中仍然存在不需要的字符.我也尝试了以下答案中的建议.很确定这是一个编码问题,但我只是不知道如何解决它,所以当然任何帮助都非常感激.
zwo*_*wol 12
这里的问题是您下载的文件的编码(aa_meetings.csv).服务器不在其HTTP标头中声明编码,但文件中唯一的非ASCII 1个八位字节的值为0x92.你说这应该是"可怕的奇怪的单引号字符",因此文件的编码是windows-1252.但是你正在尝试搜索和替换U + 2019的UTF-8编码,即'\xe2\x80\x99'文件中没有的内容.
解决这个问题就像添加适当的调用encode和decode:
# encoding: utf-8
import urllib2
# read raw CSV data from URL
url = urllib2.urlopen('http://www.aaphoenix.org/meetings/aa_meetings.csv')
raw = url.read().decode('windows-1252')
# replace bad characters
raw = raw.replace(u'’', u"'")
print(raw.encode("ascii"))
Run Code Online (Sandbox Code Playgroud)
1 "ASCII"我的意思是"字符编码,它将值为0x00到0x7F的单个八位字节直接映射到U + 0000到U + 007F,并且没有定义值为0x80到0xFF的八位字节的含义".