1.python中正常的输入输出经过如下编解码流程:
输入 -> str -> decode -> unicode -> encode -> str -> 输出
一般情况下,我们在程序里做的只是:
输入 -> str -> 逻辑处理 -> str -> 输出
2.python默认使用ascii进行decode,所以抛出的错误经常如下所示:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd5 in position 0: ordinal not in range(128)
3.如果直接对字符串使用encode方法,假设a是cp936编码:
a.encode('utf-8')
同样会抛出错误,因为encode 是 unicode 类型的方法,对 str 进行调用时,程序会默认先直接试图用 ascii 编码把 str 转成 unicode。
正确的做法:
a.decode('cp936').encode('utf-8')
4.你在编码时会同时处理到的几份编码:
程序文件本身的编码 - 你在程序里赋值的字符串
输入来源的编码 - 获取的变量值
输出环境的编码 - 控制台、文件、网页
转载于:https://my.oschina.net/hounLeft/blog/682180