协慌网

登录 贡献 社区

UnicodeDecodeError:'charmap' 编解码器无法解码位置 Y 的字节 X:字符映射到 <undefined>

我正在尝试使一个 Python 3 程序对充满信息的文本文件进行一些操作。但是,当尝试读取文件时,出现以下错误:

Traceback (most recent call last):  
     File "SCRIPT LOCATION", line NUMBER, in <module>  
     `text = file.read()`  
     File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode  
     `return codecs.charmap_decode(input,self.errors,decoding_table)[0]`  
     UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character maps to `<undefined>`

答案

该文件未使用CP1252编码。它正在使用另一种编码。您必须弄清楚哪一个。常见的是Latin-1UTF-8 。由于0x90 Latin-1实际上并不意味着什么, UTF-8 (其中0x90是连续字节)。

您在打开文件时指定编码:

file = open(filename, encoding="utf8")

如果file = open(filename, encoding="utf8")不起作用,请尝试
file = open(filename, errors="ignore") ,如果要删除不需要的字符。

作为 @LennartRegebro 答案的扩展:

如果您无法确定文件使用的编码方式,并且上述解决方案不起作用(不是utf8 ),而您发现自己只是在猜测 -您可以使用在线工具来确定编码方式。它们并不完美,但通常效果很好。确定编码后,您应该可以使用上面的解决方案。

编辑:(从评论中复制)

一个非常流行的文本编辑器Sublime Text有一个命令可以显示编码(如果已设置)...

  1. 转到View -> Show Console (或Ctrl + `

在此处输入图片说明

  1. view.encoding()处输入字段,并希望取得最佳效果(除了Undefined我什么也没得到,但也许您会遇到更多的好运...)

在此处输入图片说明