python显示乱码_python2显示乱码问题实战详解

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编码与西文编码有重叠的范围,具体重叠多少没有细究。

至少,在我测试过很多的汉字里,都有编码对应。

也就是说,同

请微信扫码阅读。

为防止恶意爬虫,

已开启反爬机制,

理解哟~~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值