Python使用错误的编码

1 投票
1 回答
1190 浏览
提问于 2025-04-17 13:09

我在用 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 来猜测;在打开文件时明确指定编码。

撰写回答