字符编码
理解字符编码的作用与常见编码标准
掌握 Python 中字符串的编码与解码
了解乱码产生的原因
核心讲解
(1)什么是字符编码
计算机只能存储 0 和 1 的二进制数字,不能直接存储文字。字符编码就是一套规则,用来把文字转换成二进制数字存储,读取时再转换回来。
(2)常见编码标准
ASCII:最早的编码,只包含英文、数字和符号,1 个字节存 1 个字符,不支持中文
GBK:国标编码,专门为中文设计,2 个字节存 1 个汉字,Windows 系统默认常用
UTF-8:国际通用编码,可变长编码,英文 1 字节,中文 3 字节。是互联网的标准编码,也是 Python 的默认编码,推荐优先使用
(3)编码与解码
编码(encode):字符串 → 二进制字节(bytes),用于存储和传输
解码(decode):二进制字节 → 字符串,用于读取和展示
核心原则:用什么编码存的,就要用什么编码读,编码和解码不一致就会出现乱码。
代码示例
text = "你好Python"
# 编码:字符串转bytes
# 默认utf-8编码
b1 = text.encode()
print(b1)
print(type(b1)) # <class 'bytes'>
# 指定gbk编码
b2 = text.encode("gbk")
print(b2)
# 解码:bytes转字符串
# 用utf-8解码utf-8编码的字节
s1 = b1.decode()
print(s1) # 你好Python
# 用gbk解码gbk编码的字节
s2 = b2.decode("gbk")
print(s2) # 你好Python
# 错误示范:编码解码不一致会乱码或报错
# print(b2.decode()) # 报错,因为b2是gbk编码,默认用utf-8解码
常见误区
混淆字符串和 bytes:字符串是给人看的文本,bytes 是给计算机存的二进制,两者不一样
编码解码不一致:这是乱码最常见的原因,一定要保证编码标准统一
中文编码选择:优先使用 UTF-8,兼容性最好,避免乱码问题
课后练习
定义一个中文字符串,分别用 utf-8 和 gbk 编码,观察输出的字节长度差异
将编码后的 bytes 重新解码成字符串,验证结果
思考:为什么 UTF-8 是目前最推荐的编码格式?

