Python 中字符串编码问题
Python 中 str 和 bytes 有什么区别?如何处理编码/解码问题?UTF-8 编码的原理是什么?
回答
我还是少年
- str:Unicode 字符序列(人类可读)
- bytes:字节序列(原始二进制)
# str -> bytes: encode
s = '你好'
b = s.encode('utf-8') # b'\xe4\xbd\xa0\xe5\xa5\xbd'
# bytes -> str: decode
s2 = b.decode('utf-8') # '你好'
UTF-8 编码原理:
- 变长编码(1-4 字节)
- ASCII 字符(0-127)占 1 字节,兼容 ASCII
- 中文字符通常占 3 字节
- 每个字节有特殊前缀标识字符长度
常见问题:
UnicodeDecodeError:解码时字节序列无法用指定编码解释UnicodeEncodeError:编码时字符无法用目标编码表示
解决:始终使用 encoding='utf-8' I/O,使用 errors='ignore' 或 errors='replace' 处理异常。