CodeWalk

Python 中字符串编码问题

作者:我还是少年 · 2026-05-30 12:55

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 字节
  • 每个字节有特殊前缀标识字符长度

常见问题

  1. UnicodeDecodeError:解码时字节序列无法用指定编码解释
  2. UnicodeEncodeError:编码时字符无法用目标编码表示

解决:始终使用 encoding='utf-8' I/O,使用 errors='ignore'errors='replace' 处理异常。