什么是 Encoding?
在 Python 中,encoding 指的是文本在存储或传输时所采用的字符编码方式。
常见的编码格式包括 UTF-8、GBK、ASCII 等。
正确指定编码能避免读写文件时出现乱码问题。
常见编码格式对比
- UTF-8:国际通用,支持所有 Unicode 字符,推荐用于 Web 和跨平台项目。
- GBK / GB2312:中文 Windows 系统常用,主要用于简体中文环境。
- ASCII:仅支持英文字符(0–127),不支持中文。
文件读写中的 Encoding
使用 open() 函数时,通过 encoding 参数指定编码:
✅ 正确示例:读取 UTF-8 编码的文件
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
⚠️ 错误示例:未指定编码(可能引发乱码或 UnicodeDecodeError)
# 不推荐!系统默认编码可能不是你期望的
with open('chinese.txt', 'r') as f:
print(f.read()) # 可能报错或显示乱码
字符串与字节的转换
Python 3 中,字符串(str)和字节(bytes)是不同类型,需显式转换:
# str → bytes
text = "你好"
b = text.encode('utf-8') # b'\xe4\xbd\xa0\xe5\xa5\xbd'
# bytes → str
decoded = b.decode('utf-8') # "你好"
常见错误处理
当遇到无法解码的字节时,可使用 errors 参数:
errors='ignore':忽略非法字符errors='replace':用替代非法字符errors='strict'(默认):抛出UnicodeDecodeError
with open('bad_file.txt', 'r', encoding='utf-8', errors='replace') as f:
print(f.read())
实用技巧
- 始终在
open()中显式指定encoding='utf-8'(除非有特殊需求)。 - 项目根目录添加
.editorconfig或注释说明编码约定。 - 在脚本开头声明文件编码(Python 2 需要,Python 3 默认 UTF-8):
# -*- coding: utf-8 -*-
总结
正确理解和使用 encoding 是 Python 开发中的基础技能。
坚持使用 UTF-8 编码、显式声明、合理处理异常,就能有效避免绝大多数乱码问题。