处理文本的最佳实践是“Unicode 三明治”


  1. 要尽早把输入(例如读取文件时)的字节序列解码成字符串。
  2. 这种三明治中的“肉片”是程序的业务逻辑,在这里只能处理字符串对象。
  3. 在其他处理过程中,一定不能编码或解码。
  4. 对输出来说,则要尽量晚地把字符串编码成字节序列。

案例

例如,在 Django 中,
视图应该输出 Unicode 字符串;
Django 会负责把响应编码成字节序列,而且默认使用 UTF-8 编码。

clipboard.png

编码建议 显示指明编码

编码默认值的最佳建议是:别依赖默认值
明确指定encodeing

二进制模式

除非想判断编码,否则不要在二进制模式中打开文本文件;
即便如此,也应该使用 Chardet,而不是重新发明轮子

总结

Unicode 三明治
  • 尽早 字节序列解码成字符串
  • 三明治中的“肉片”是程序的业务逻辑,在这里只能处理字符串对象
  • 尽量晚地把字符串编码成字节序列
显示编码
别再二进制中打开文本,判断编码应该使用 Chardet

小小梁
23 声望15 粉丝