使用Python搜索并用管道替换刺(þ)字符(|)

时间:2013-08-12 17:03:35

标签: python

我正在尝试使用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无法解码刺字符。这有什么问题?提前致谢

2 个答案:

答案 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'