解决python3读写中文txt时UnicodeDecodeError : 'ascii' codec can't decode byte 0xc4 in position 5595: ordinal not in range(128) on line 0的问题

时间:2021-08-02 23:52:27

今天使用python3读写含有中文的txt时突然报了如下错误,系统是MAC OS,iDE是pycharm:

UnicodeDecodeError : 'ascii' codec can't decode byte 0xc4 in position 5595: ordinal not in range(128) on line 0

按理说python3的默认编码是unicode,不应该出现这种错误,排查以后发现问题及解决方案如下:

import locale
print(locale.getpreferredencoding())
>>> US-ASCII

也就是说系统默认的打开文本文档的编码变成了"US-ASCII",需要修改环境变量.

打开终端,输入locale,可以查看到自己本机的默认语言编码设置.在终端输入以下命令:

vim ~/.bash_profile
(如果你使用的是zsh,就open .zshrc)

然后在上面打开的文件里加入如下的环境变量:

LANG="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_ALL=C

然后在终端输入source ~/.bash_profile使修改生效,就可以成功读写中文txt了.