在 Ubuntu 下 Python 出现“乱码”,通常不是 Python 本身的问题,而是编码环境不一致导致的。下面按常见原因给你系统说明一下。
locale
如果看到类似:
LANG=C
LC_CTYPE=POSIX
或不是 UTF-8,就很可能出现乱码。
设置为 UTF-8:
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8
或者英文环境:
sudo update-locale LANG=en_US.UTF-8
重启终端或重新登录。
如果文件中有中文,必须声明:
# -*- coding: utf-8 -*-
否则会报错或乱码。
默认就是 UTF-8,不需要声明,但文件本身必须真的是 UTF-8 保存的。
例如 Windows 下保存为 GBK。
查看文件编码:
file xxx.py
转换编码:
iconv -f gbk -t utf-8 xxx.py > xxx_utf8.py
即使 Python 输出是对的,终端不支持也会乱码。
检查终端编码:
右键 → 配置文件 → 编码 → UTF-8print "中文" # Python 2 未声明编码
# Python 3
print("中文")
或 Python 2:
# -*- coding: utf-8 -*-
print u"中文"
with open("a.txt", encoding="utf-8") as f:
print(f.read())
with open("b.txt", "w", encoding="utf-8") as f:
f.write("中文")
locale 是 UTF-8encoding如果你愿意,可以把具体报错或乱码截图/代码发出来,我可以直接帮你定位是哪一种乱码。