python中经常有显示乱码字符问题,类似这样:ä¸å½。查看json.dumps数据,是这样的:"\u00e4\u00b8\u00ad\u00e5\u009b\u00bd"。
这是什么原因造成的呢?我们来一探究竟。
既然能显示乱码,说明原始编码和显示编码是相互可以映射到字符的,只是不是预期的字符,所以看到这样的乱码字符。
从内部编码来看,这个编码的值是单字节的,所以可以排除是ASCII与UTF8之间的乱码。
根据经验判断,这个有可能是ASCII、GBK(国标码)、ISO-8859-1(西文编码)之间的错乱。西文编码是很常用的一种编码格式。
我们来复现这个乱码出现的过程。
我们测试一下GBK解码到西文编码:#coding:utf-8
import json
import base64
a = '中国'
b = a.decode('iso-8859-1')
print b
c = json.dumps(b)
print c
输出结果:ä¸å½
"\u00e4\u00b8\u00ad\u00e5\u009b\u00bd"和我们开始提到的现象是一致的。这当然不是巧合,因为这是我已经研究过的,只是复现一遍而已。
不过,复盘来看,这个排查思路应该是这样的。
那么为什么会这样呢?
'中国'这个是在python2中是str类型,是字节序列类型。字节序列映射到本机的字符集,就是GBK编码。
GBK编码与西文编码有重叠的范围,具体重叠多少没有细究。
至少,在我测试过很多的汉字里,都有编码对应。
也就是说,同
请微信扫码阅读。
为防止恶意爬虫,
已开启反爬机制,
理解哟~~~~