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

1063 投票
15 回答
1783780 浏览
提问于 2025-04-17 12:47

我正在尝试让一个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>`  

在阅读这个问答后,如果你需要帮助来确定你想打开的文件的编码,可以查看 如何确定文本的编码

15 个回答

88

另外,如果你不需要解码这个文件,比如说只是想把文件上传到一个网站,可以使用:

open(filename, 'rb')

这里的 r 代表 读取b 代表 二进制

137

如果 file = open(filename, encoding="utf-8") 这个方法不管用,可以试试
file = open(filename, errors="ignore"),这样可以去掉一些不需要的字符。 (文档)

1846

这个文件并不是用CP1252编码的,而是用其他编码。具体是哪种编码你需要自己去查找。常见的编码有Latin-1和UTF-8。因为在Latin-1中,0x90这个值其实是没有意义的,而在UTF-8中,0x90是一个延续字节,所以更有可能是用UTF-8编码。

当你打开文件的时候,需要指定编码:

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

撰写回答