Python 读取文本文件时出现UnicodeDecodeError错误

Python 读取文本文件时出现UnicodeDecodeError错误,python,Python,我是Python的初学者(我正在使用3.4)。这是我代码的相关部分 fileObject = open("countable nouns raw.txt", "rt") bigString = fileObject.read() fileObject.close() 每当我尝试读取此文件时,我都会得到: UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 82273: character maps to

我是Python的初学者(我正在使用3.4)。这是我代码的相关部分

fileObject = open("countable nouns raw.txt", "rt")
bigString = fileObject.read()
fileObject.close()
每当我尝试读取此文件时,我都会得到:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 82273: character maps to <undefined>
但你必须事先知道。问题是我不知道文本文件是如何编码的。一些帖子建议使用Chardet。我已经安装了它,但我不知道如何让它读取文本文件


关于如何解决这个问题有什么想法吗?

没有必要使用
编解码器。open()
;这是对Python2的建议

在Python 3中,
open()
接受一个
encoding
参数:

fileObject = open("countable nouns raw.txt", "rt", encoding='utf8')

当然,这需要您知道文件使用了什么编解码器。一般来说,Python不容易理解这一点;单个文件格式可能包含编解码器信息或在给定编解码器上进行了标准化,但如果所有文件都有一个通用文本文件,则必须找出是什么创建了该文件以及用于写入数据的编解码器。

除了在使用
打开时使用正确的Python方法指定编码外,您可以尝试使用该工具获取编码

包含以下内容的文件
foo.txt

ÙÚÛÜ
可以使用

$ file foo.txt 
foo.txt: UTF-8 Unicode text
$ wc foo.txt
1 1 9 foo.txt

通过使用可以看到,它包含九个字节,每个字符两个字节,一个换行符。

要添加到Martijn Pieters答案中,您可能需要查看以下链接:


如果您是Mac用户,并且无法确定特定文件的编码方式。

在任何操作系统上检测编码的一种方法是使用库chardet。 如果没有,请确保运行pip install chardet。在这之后,就相当简单了:

import chardet
import requests
content = requests.get("http://yahoo.co.jp/").content
detect = chardet.detect(content)
print(detect)
此库尝试检测编码是什么。这并不意味着它是100%正确的,只是它可能是正确的。然后您就可以读取该文件:

open('file.txt', encoding=detect['encoding'])

windows上是否存在
文件
open('file.txt', encoding=detect['encoding'])