Python编码实例

情景: Python通过shell程序读取文件列表, 然后从一个UTF-8格式的文件读取文本, 以行分隔为另一个列表, 对这两个列表进行比较.

这两个来源的数据读到Python的内存中的时候, 打印type都是str. 其中一个编码是UTF-8. 如果要对字符串进行比较必须将两者变成同一个编码. 在Windows下面和shell打交道的编码一般称为ANSI, 但是实际的编码可能是三种, GBK, GB2312,GB18030.

使用MySQL的时候, 使用GB2312没问题. 但是Python里面无论是GBK还是GB2312都无法正确的解码. 在Win7下只有GB18030才能正确解码. 对来自Shell程序的数据做如下转换.

line.decode('gb18030').encode('utf-8')

随之而来的问题是, 对于os.path.exists这样的函数, 必须要接受和系统一样的编码字符串才能正确的判断文件是否存在, 如果你的编码是utf-8的而且文件名包含中文, 必须重新转回来.

file.decode('utf-8').encode('gb18030')