python,codecs,file.writelines(),UnicodeDecodeError

时间:2011-11-20 19:33:25

标签: python regex file-io codec

不知道如何解决UnicodeDecodeError

我无法将文字写入文件 - > UnicodeDecodeError关于字符â = '0xe2'

1)确实{1}}字符在该字符串中不存在

2)â = '0xe2'无法在字符串中找到re.search字符,我正在尝试编写â

3)文件打开时定义了file.writelines(string),因此errors='replace'不应该抱怨字符错误。

file.writelines()

1 个答案:

答案 0 :(得分:3)

您正在使用codecs.open,因此您的文件对象需要unicode字符串,而不是字节字符串。

使用此函数的要点是,在将字符串写入文件之前,您不必自己对字符串进行编码。你编写unicode字符串,文件对象将在内部编码。

看起来smart_str返回UTF-8编码的字符串(看到您将编码名称传递给它)。如果将其传递给需要unicode的编解码器感知文件对象,它将首先尝试将字节字符串解码回unicode。因为它不知道传入的字符串的编码,所以它将使用ascii。这就是错误的来源,因为字符串不是ascii,它是UTF-8:

UnicodeDecodeError : 'ascii' codec can't decode...

因此,您希望跳过smart_str完成的编码阶段,只需将unicode字符串写入文件,或者从codecs.open()切换到使用字节的普通open()和因此期望已经编码的字节串。

顺便说一句,你对0xE2字符存在的测试是行不通的。首先,使用r'0xe2'作为模式,它只是一个4个字符的字符串,而不是一个0xE2字符。其次,对于简单的事情,你不需要re。试试这个:

print '\xe2' in your_str