python中编码问题是一个必然会遇见的问题,尤其是中文编码,一不小心就出现乱码。
为此,一个绝对不能绕过的模块codecs, 可以看出python对编码这块的支持甚是强大。
另有附带codecs代码示例的博文,顺着文章一通敲下来,python中的编码问题自然就不是问题了.
在使用python写一个简单爬虫的过程中,我遇见一个相关问题,也算是比较奇葩了,瞎折腾了一晚上才算是解决。
本来抓取网页内容编码是 "GB2312", 传入值以后使用decode('gb2312', 'ignore')后解码为unicode,再使用Beautiful Soup进行解析处理,解析结构存入list, dict的复合结构中.
最后直接使用json.dumps()返回string结果, 发现中文没有正确显示,但也并非乱码, 而是类似"\u5b9e\u8df5\u8fdc"的字符.
以为是编码不对,但尝试过其他各种编码方式也都没有正确显示中文,一直到网上搜索到decode("unicode_escape")这一句才解决问题.
个人理解为:存在于list,dict等容器中的unicode字符就是一这种编码方式存在的,单独打印某一项的时候,会显示成中文字符,但是直接打印整个list的时候,就不会做字符映射以正确显示中文,必须使用decode("unicode_escape").
这里也是因为我自己偷懒,直接使用json.dumps()将整个list的内容一股脑打印出来,图方便,反倒引入了这么一个问题,若是按照list的结构,逐项输出,就不存在这类中文字符显示异常的问题了。