为了账号安全,请及时绑定邮箱和手机立即绑定

为什么读取包含中文字符的文件时会出现 UnicodeDecodeError?

为什么读取包含中文字符的文件时会出现 UnicodeDecodeError?

哆啦的时光机 2022-07-26 10:35:38
>>> 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 保存。我的python版本是3.6.5。但它在python2.7中运行正常。
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

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

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

您的语言环境可能应该首选编码指定为 UTF-8,但我认为这取决于操作系统和语言设置。


查看完整回答
反对 回复 2022-07-26
?
达令说

TA贡献1821条经验 获得超6个赞

Python 2.7 默认将文件读入字节字符串。

Python 3.x 默认将文件读入 Unicode 字符串,因此必须对文件中的字节进行解码。

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

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

with open(path,'r',encoding='utf8') as f:
    ...

您也可以在 Python 2 中执行此操作,但请使用io.open(),它与 Python 3 兼容,open()并且将读取 Unicode 字符串而不是字节字符串。 io.open()在 Python 3 中也可以使用,以实现可移植性。


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信