什么是 Encoding?
在 Python 中,encoding(编码)是指将字符串(文本)转换为字节(bytes)或将字节还原为字符串的规则。
不同的编码方式(如 UTF-8、GBK、ASCII 等)决定了计算机如何存储和传输文本数据。
如果编码与解码使用的方式不一致,就会出现“乱码”或 UnicodeDecodeError 错误。
常见编码类型
- UTF-8:最通用的 Unicode 编码,支持全球所有语言,推荐在 Web 和跨平台项目中使用。
- GBK / GB2312:中文 Windows 系统常用编码,主要用于简体中文。
- ASCII:仅支持英文字符(0–127),不支持中文等非拉丁字符。
- Latin-1 (ISO-8859-1):西欧语言编码,不兼容中文。
Python 中的编码操作
字符串(str)与字节(bytes)之间的转换:
# 字符串 → 字节(编码)
text = "你好,世界!"
b = text.encode('utf-8')
print(b) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
# 字节 → 字符串(解码)
decoded = b.decode('utf-8')
print(decoded) # 你好,世界!
文件读写中的 encoding
读取或写入文件时,务必指定正确的编码:
# 正确指定编码(推荐)
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 写入文件
with open('output.txt', 'w', encoding='utf-8') as f:
f.write("Hello, 世界!")
如果不指定 encoding,Python 会使用系统默认编码(如 Windows 可能是 GBK),容易导致跨平台乱码。
常见错误与解决方法
UnicodeDecodeError:尝试用错误编码解码字节。解决:确认源文件真实编码,使用正确encoding参数。- 中文显示为乱码:通常是因为读取时未指定 UTF-8 或使用了错误编码。
- 建议:始终在
open()中显式指定encoding='utf-8'。
小测试:你的文件是什么编码?
点击下方按钮,查看一段模拟检测逻辑(控制台输出):