1

我正在尝试使用python查找刺“þ”字符,并用管道“|”替换。例如,该文件的内容类似于 125650+383736+392647。下面是我的代码:

f = codecs.open(path, encoding='utf-8', mode='r+')
contents = f.read()
if u'\u00FE' in contents:
    print 'Found thorn'

我在 contents = f.read() 行出现错误:UnicodeDecodeError: 'utf8' codec can't decode byte 0xfe in position 7: invalid start byte

似乎文件对象 f 无法解码刺字符。这里有什么问题?提前致谢

4

2 回答 2

3

解码错误的最常见原因是您使用了错误的编码。在这种情况下,您的文件看起来是用 Windows-1252 或 latin-1 编码的,而不是 UTF-8。我很确定是这种情况,因为0xfe这些编解码器的拉丁小写字母 thorn 的代码点。

例如:

>>> print '125650\xfe383736\xfe3926'.decode('latin-1')
125650þ383736þ3926
于 2013-08-12T17:11:55.013 回答
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'
于 2013-08-12T17:13:28.307 回答