处理文本的最佳实践是“Unicode 三明治”
- 要尽早把输入(例如读取文件时)的字节序列解码成字符串。
- 这种三明治中的“肉片”是程序的业务逻辑,在这里只能处理字符串对象。
- 在其余处理过程当中,必定不能编码或解码。
- 对输出来讲,则要尽可能晚地把字符串编码成字节序列。
案例
例如,在 Django 中,
视图应该输出 Unicode 字符串;
Django 会负责把响应编码成字节序列,并且默认使用 UTF-8 编码。

编码建议 显示指明编码
编码默认值的最佳建议是:别依赖默认值
明确指定encodeing编码
二进制模式
除非想判断编码,不然不要在二进制模式中打开文本文件;
即使如此,也应该使用 Chardet,而不是从新发明轮子spa
总结
Unicode 三明治
- 尽早 字节序列解码成字符串
- 三明治中的“肉片”是程序的业务逻辑,在这里只能处理字符串对象
- 尽可能晚地把字符串编码成字节序列
显示编码
别再二进制中打开文本,判断编码应该使用 Chardet