Python 无法解码 'é' ('\xe9') 使用 ASCII 编解码器,因为该字符不是 7 位 ASCII。
您的问题(精简):
import HTMLParser
parser = HTMLParser.HTMLParser()
input = 'Rudimental & Emeli Sand\xe9'
output = parser.unescape(input)
produces
Traceback (most recent call last):
File "problem.py", line 4, in <module>
output = parser.unescape(input)
File "/usr/lib/python2.7/HTMLParser.py", line 475, in unescape
return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
File "/usr/lib/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 11: ordinal not in range(128)
HTMLParser.unescape()返回一个unicode对象,因此必须转换您的输入str。所以它要求默认编码(在你的情况下是 ASCII)并且无法解释 '\xe9' 作为 ASCII 字符(因为它不是)。我猜你的文件编码是 ISO-8859-1 其中 '\xe9' is 'é'.
有两个简单的解决方案。您可以手动进行转换:
import HTMLParser
parser = HTMLParser.HTMLParser()
input = 'Rudimental & Emeli Sand\xe9'
input = input.decode('iso-8859-1')
output = parser.unescape(input)
或者你使用编解码器.open()代替open()每当您处理文件时:
import codecs
import HTMLParser
parser = HTMLParser.HTMLParser()
input = codecs.open("import.txt", encoding="iso-8859-1").readline()
output = parser.unescape(input)