Appearance
Python 字符编码
在计算机中,字符必须以数字的形式存储和处理。这就涉及到字符编码(Character Encoding)。Python 语言,支持各种字符编码。
1. 什么是字符编码?
字符编码是用于将字符映射到二进制数据的规则。计算机只能处理二进制数据(0 和 1),因此每个字符都需要一个唯一的二进制表示。
常见字符编码如下:
- ASCII(美国标准信息交换码)
- GB2312/GBK(中文编码)
- Unicode(国际标准编码)
- UTF-8(Unicode 的一种变长存储方式)
2. 常见的字符编码格式
2.1 ASCII 编码
ASCII(American Standard Code for Information Interchange)使用 7 位或 8 位表示字符,共支持 128 个字符。ASCII 只能表示英语字符,无法支持中文等其他语言。
plaintext
A -> 01000001
B -> 01000010
C -> 01000011
2.2 Unicode 编码
Unicode 统一了所有字符的编码,为每个字符分配唯一的数字 ID。常见的 Unicode 编码方式包括:
- UTF-8(最常用,变长编码,每个字符占 1-4 字节)
- UTF-16(定长编码,常用 2 或 4 字节)
- UTF-32(定长编码,每个字符 4 字节)
UTF-8 兼容 ASCII,是目前最流行的字符编码。
2.3 GB2312/GBK 编码
GB2312 是中国国家标准字符集,支持简体中文。 GBK(GB2312 的扩展)兼容 GB2312,并增加了更多汉字。
plaintext
“你” 在 GB2312 中编码为:0xC4E3
“好” 在 GB2312 中编码为:0xBAA3
3. Python 处理字符编码
Python 3 默认使用 UTF-8 编码,支持多种字符编码方式。
3.1 编码与解码
在 Python 中,字符串是 str
类型,二进制数据是 bytes
类型。需要使用 encode()
和 decode()
进行转换。
3.1.1 字符串编码(str → bytes)
python
s = "你好"
encoded_s = s.encode("utf-8") # UTF-8 编码
print(encoded_s) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
3.1.2 字符串解码(bytes → str)
python
decoded_s = encoded_s.decode("utf-8") # UTF-8 解码
print(decoded_s) # 你好
3.2 读取文件时的编码问题
在 Python 中,读取文本文件时需要指定编码,否则可能出现乱码。
3.2.1 读取 UTF-8 文件
python
with open("test.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
3.2.2 读取 GBK 文件并转换为 UTF-8
python
with open("test_gbk.txt", "r", encoding="gbk") as f:
content = f.read()
# 转换为 UTF-8 编码
utf8_content = content.encode("utf-8")
print(utf8_content.decode("utf-8"))