我正在尝试使用python来找到刺“þ”字符,并用管道“|”替换。例如,文件的内容如125650þ383736þ392647。以下是我的代码:
f = codecs.open(path, encoding='utf-8', mode='r+')
contents = f.read()
if u'\u00FE' in contents:
print 'Found thorn'
我在content = f.read()行上遇到错误: UnicodeDecodeError:'utf8'编解码器无法解码位置7中的字节0xfe:无效的起始字节
似乎文件对象f无法解码刺字符。这有什么问题?提前致谢
答案 0 :(得分:3)
解码错误的最常见原因是您使用了错误的编码。在这种情况下,您的文件看起来像是在Windows-1252或latin-1中编码,而不是UTF-8。我很确定是这种情况,因为0xfe
是拉丁语小写字母对这些编解码器的代码点。
例如:
>>> print '125650\xfe383736\xfe3926'.decode('latin-1')
125650þ383736þ3926
答案 1 :(得分:0)
您的文件不包含有效的UTF8编码,u'\u00FE'
也不包含þ
的正确UTF8编码:
>>> u'þ'.encode('utf8')
'\xc3\xbe'
看起来你期望的编码是latin-1:
>>> u'þ'.encode('latin-1')
'\xfe'
所以你想要:
f = codecs.open(path, encoding='latin-1', mode='r+')
contents = f.read()
if u'þ' in contents:
print 'Found thorn'