掌握字符编码,告别乱码烦恼
字符编码是将人类可读的字符(如字母、汉字)转换为计算机可存储和传输的二进制数据的规则。在 Python 中,正确处理编码对程序的健壮性至关重要。
常见的编码格式包括:
ASCII:仅支持英文字符(0–127)UTF-8:可变长度编码,兼容 ASCII,支持全球所有语言GBK/GB2312:中文常用编码(主要用于旧系统)Python 3 明确区分了文本(str)和二进制数据(bytes):
# 文本字符串(Unicode)
text = "你好,世界!"
# 编码为 UTF-8 字节
data = text.encode('utf-8') # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
# 解码回字符串
original = data.decode('utf-8')
读写文本文件时,务必指定编码:
# 写入 UTF-8 文件
with open('example.txt', 'w', encoding='utf-8') as f:
f.write("中文内容")
# 读取文件
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
若不指定 encoding,Python 会使用系统默认编码,可能导致跨平台乱码。
UnicodeDecodeError:尝试用错误编码解码字节。
解决:确认源数据真实编码(可用 chardet 库检测)。UnicodeEncodeError:无法将字符编码为目标格式。
解决:使用 errors='ignore' 或 errors='replace' 参数。# 安全解码未知编码
with open('unknown.txt', 'rb') as f:
raw_data = f.read()
import chardet
encoding = chardet.detect(raw_data)['encoding']
text = raw_data.decode(encoding)
UTF-8 编码(源代码文件也应保存为 UTF-8)# -*- coding: utf-8 -*-
str 和 bytes,保持类型清晰