温馨提示×

ubuntu python为何乱码

小樊
70
2026-09-04 13:59:35
栏目: 编程语言

在 Ubuntu 上使用 Python 出现“乱码”,通常不是 Python 本身的问题,而是编码(encoding)不一致导致的。下面用通俗的方式给你总结常见原因和解决办法。


一、最常见的乱码原因

1️⃣ 终端编码不是 UTF-8

Ubuntu 终端默认应是 UTF-8,但有时被改成了 GBK、ISO-8859-1 等。

现象

print("中文")

显示成:

中文

解决

locale

如果不是 UTF-8,执行:

sudo apt install locales
sudo locale-gen zh_CN.UTF-8
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

永久生效(写入 ~/.bashrc):

echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=zh_CN.UTF-8' >> ~/.bashrc

2️⃣ Python 源码文件编码不对

Python 3 默认源码是 UTF-8,但如果你:

  • 用 Windows 保存成 GBK
  • 用旧编辑器

就会乱码或报错。

解决

  • 文件保存为 UTF-8
  • 文件开头加(Python 2 才必须,Python 3 推荐):
# -*- coding: utf-8 -*-

3️⃣ 读取/写入文件时未指定编码

这是最常见错误。

❌ 错误写法:

with open("a.txt") as f:
    print(f.read())

✅ 正确写法:

with open("a.txt", encoding="utf-8") as f:
    print(f.read())

写文件同理:

with open("a.txt", "w", encoding="utf-8") as f:
    f.write("中文")

4️⃣ 从网络 / 数据库读取数据编码不对

例如:

  • 网页是 GBK
  • MySQL 是 latin1

解决 明确指定编码:

requests.get(url).content.decode("gbk")

5️⃣ Python 2 的锅(如果你还在用)

Python 2 默认不是 UTF-8,非常容易乱码。

✅ 建议:直接用 Python 3


二、快速自检清单 ✅

python3 -c "import sys; print(sys.getdefaultencoding())"

应为:

utf-8
locale

应为:

LANG=zh_CN.UTF-8

三、最小不乱码模板(推荐)

# -*- coding: utf-8 -*-
import sys

print("中文测试")
print(sys.getdefaultencoding())

四、如果你愿意

你可以把具体乱码截图 / 代码 / 报错信息发出来,我可以直接帮你定位是哪一步编码错了。

0 踩