中文编码一般使用utf-8、gbk、gb2312等编码,但有时候根据汉字源编码的不同,在转换为utf-8或gbk或gb2312编码的时候,有时候输出还是乱码,如:
有时候还会报错,如:
这些是由汉字的编码不同导致的,详见这些编码的区别:
GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二位为a1-d3),计算一下汉字个数为6762个汉字。当然还有其他的字符。包括控制键和其他字符大约7573个字符编码。
GBK编码是对GB2312编码的扩充,容纳的汉字更多,但仅仅是扩充,没有质的变化。保留了所有GB2312编码,在此基础上进行编码范围的扩充容纳(包含特殊字符)共22014个字符编码。
GB18030编码是在gbk编码基础上的扩充,因为汉字更多,仅仅使用两位编码已经不能容纳要求的汉字,所以采用了24位混和的办法,可以支持更多的汉字编码。并且保留了原有的GBK 2字节编码兼容GB2312和GBK编码的文件。大概容纳55657个编码(包含特殊字符)。
更多的区别请自行查找。
所以当python中的中文字符串编码或解码出现乱码时,可以考虑使用gb18030,如下:
print str.encode(“gb18030”)