我试图让一个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-1和UTF-8。由于在Latin-1中0x90实际上没有任何含义,因此更可能是UTF-8(其中0x90是一个延续字节)。

打开文件时指定编码:

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

其他回答

如果file = open(filename, encoding="utf-8")不起作用,请尝试 File = open(filename, errors="ignore"),如果你想删除不需要的字符。(文档)

不要再浪费你的时间了,只要在读写代码中添加以下encoding="cp437"和errors='ignore'即可:

open('filename.csv', encoding="cp437", errors='ignore')
open(file_name, 'w', newline='', encoding="cp437", errors='ignore')

祝成功

def read_files(file_path):

    with open(file_path, encoding='utf8') as f:
        text = f.read()
        return text

或(和)

def read_files(text, file_path):

    with open(file_path, 'rb') as f:
        f.write(text.encode('utf8', 'ignore'))

对我来说,用utf16编码是有效的

file = open('filename.csv', encoding="utf16")

对我来说,改变Mysql字符编码一样,我的代码有助于整理出解决方案。照片=开放(pic3.png,编码= latin1)中的一个