不知道如何解决UnicodeDecodeError
:
我无法将文字写入文件 - > UnicodeDecodeError
关于字符â = '0xe2'
。
1)确实{1}}字符在该字符串中不存在
2)â = '0xe2'
无法在字符串中找到re.search
字符,我正在尝试编写â
3)文件打开时定义了file.writelines(string)
,因此errors='replace'
不应该抱怨字符错误。
file.writelines()
答案 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