用Python替换空白字符串中的奇怪单引号(')

Gad*_*ady 9 python

我正在尝试用来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'文件中没有的内容.

解决这个问题就像添加适当的调用encodedecode:

# 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的八位字节的含义".


Rob*_*let 8

您必须声明源文件的编码.把它作为代码的前两行之一:

# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

如果您使用的是UTF-8以外的编码(例如Latin-1),则必须改为使用.