Python使用错误的编码
我在用 Python 3.2 的时候,想用 str(bytes, "cp1251") 来解码一些字节,但出现了这个错误:
Traceback (most recent call last):
File "C:\---\---\---\---.py", line 4, in <module>
writetemp.write(str(f.read(), "cp1251"))
File "C:\Python32\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 19-25: character maps to <undefined>
你可以看到,我明明指定了 "cp1251",但它却试图用 "cp1252.py" 来解码,而不是 "cp1251.py",这可能就是出错的原因。如果我用 "Windows-1251" 代替 "cp1251",也会出现同样的问题。
1 个回答
5
注意你遇到的是 UnicodeEncodeError
错误,而不是 UnicodeDecodeError
错误。这个错误不是因为你调用了 str(f.read(), "cp1251")
,而是出现在 writetemp.write()
这个调用上。
这里的 str()
调用是把你从 f.read()
得到的字节用 cp1251
编码转换成字符串。这一步是成功的,结果是一个字符串(在 Python 3 中是 Unicode 字符串)。接下来,writetemp.write()
需要把这个字符串再转换回字节,也就是进行编码。它会使用你在打开 writetemp
时指定的编码,或者是 Python 根据一些情况猜测的默认编码。你可以通过查看文件对象的 encoding
属性来了解使用的编码。你可能会发现它是 cp1252
。如果你想用特定的编码来写文件,不要依赖 Python 来猜测;在打开文件时明确指定编码。