当我读到一个包含汉字的文件时,为什么会出现UnicodeDecodeError错误? 路径='name.txt' >>>内容=无 >>>打开(路径“r”)作为文件: ... content=file.readlines() ... 回溯(最近一次呼叫最后一次): 文件“”,第2行,在 文件“/mnt/lustre/share/miniconda3/lib/python3.6/encodings/ascii.py”,第26行,解码 返回编解码器。ascii_解码(输入,自身错误)[0] UnicodeDecodeError:“ascii”编解码器无法解码163位的字节0xe5:序号不在范围内(128)

当我读到一个包含汉字的文件时,为什么会出现UnicodeDecodeError错误? 路径='name.txt' >>>内容=无 >>>打开(路径“r”)作为文件: ... content=file.readlines() ... 回溯(最近一次呼叫最后一次): 文件“”,第2行,在 文件“/mnt/lustre/share/miniconda3/lib/python3.6/encodings/ascii.py”,第26行,解码 返回编解码器。ascii_解码(输入,自身错误)[0] UnicodeDecodeError:“ascii”编解码器无法解码163位的字节0xe5:序号不在范围内(128),python,encoding,Python,Encoding,当我运行此代码读取包含中文字符的文件时,我遇到了一个错误。该文件使用UTF-8保存。我的python版本是3.6.5。但它在python2.7中运行正常 正在使用ASCII编解码器尝试读取文件。解决此问题的最简单方法是指定编码: >>> path = 'name.txt' >>> content = None >>> with open(path, 'r') as file: ... content = file.readlines(

当我运行此代码读取包含中文字符的文件时,我遇到了一个错误。该文件使用UTF-8保存。我的python版本是3.6.5。但它在python2.7中运行正常

正在使用ASCII编解码器尝试读取文件。解决此问题的最简单方法是指定编码:

>>> path = 'name.txt'
>>> content = None
>>> with open(path, 'r') as file:
...     content = file.readlines()
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/mnt/lustre/share/miniconda3/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 163: ordinal not in range(128)

您的应用程序是UTF-8,但我认为这取决于操作系统和语言设置。

Python2.7默认情况下将文件读入字节字符串

默认情况下,Python3.x将文件读入Unicode字符串,因此必须对文件中的字节进行解码

使用的默认编码因操作系统而异,但可以通过调用
locale.getpreferredencoding(False)
来确定。在Linux系统上,这通常是
utf8
,但Windows系统返回本地化的ANSI编码,例如,对于美国/西欧Windows版本,返回
cp1252

在Python3中,指定您期望的文件编码,以便不依赖于特定于语言环境的默认值。例如:

with open(path, 'r', encoding='utf-8') as file:

您也可以在Python2中执行此操作,但是使用
io.open()
,它与Python3的
open()
兼容,并且将读取Unicode字符串而不是字节字符串
io.open()
在python3中也可用于可移植性。

和open可以在python3中使用可选的“encoding”关键字。。。在Python2中,它会隐式地尝试为您解码它。。。大多数情况下,它都是正确的…
打开(路径“rb”)
没有看到错误消息吗<代码>'ascii'编解码器。。。您需要告诉它使用UTF-8。@Joran Python 2的
open()
无法解码。它只返回字节字符串。您可能会想到
codecs.open()
io.open()
。使用此选项,我可以无误地读取文件。但是当我尝试打印(内容[0])时,同样的错误也会发生。
with open(path,'r',encoding='utf8') as f:
    ...