python中文乱码问题怎样处理?

Admin 2021-05-31 群英技术资讯 676 次浏览

        本文主要给大家介绍的是如何解决python中文乱码的问题。一些朋友会使用json.dumps(var,ensure_ascii=False)来解决python中文乱码,但是这不能完全解决。下文小编就给大家分享一些解决python中文乱码的办法。

        注意:json.dumps在不同版本的Python下会有不同的表现, 注意下面提到的中文乱码问题在Python3版本中不存在。

        注:下面的代码再python 2.7版本下测试通过

# -*- coding: utf-8 -*-odata = {'a' : '你好'}print odata

        结果:

{'a': '\xe4\xbd\xa0\xe5\xa5\xbd'}
print json.dumps(odata)

        结果:

{"a": "\u4f60\u597d"}
print json.dumps(odata,ensure_ascii=False)

        结果:

{"a": "浣�濂�"}
print json.dumps(odata,ensure_ascii=False).decode('utf8').encode('gb2312')

        结果:

{"a": "你好"}

        要解决中文编码,需要知道python2.7对字符串是怎么处理的:

        由于# -- coding: utf-8 --的作用,文件内容以utf-8编码,所以print odata 

        输出的是utf-8编码后的结果

{‘a': ‘\xe4\xbd\xa0\xe5\xa5\xbd'}

        json.dumps 序列化时对中文默认使用的ascii编码, print json.dumps(odata)输出unicode编码的结果

        print json.dumps(odata,ensure_ascii=False)不使用的ascii编码,以gbk编码 。‘你好' 用utf8编码是 %E4%BD%A0%E5%A5%BD 用gbk解码是 浣�濂� 字符串在Python内部的表示是unicode编码。

        因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

        decode的作用是将其他编码的字符串转换成unicode编码

        decode('utf-8')表示将utf-8编码的字符串转换成unicode编码。

        encode的作用是将unicode编码转换成其他编码的字符串

        encode(‘gb2312')表示将unicode编码的字符串转换成gb2312编码。

        python3中没有这种问题,所以最简单的方法是引入__future__模块,把新版本的特性导入到当前版本

from __future__ import unicode_literalsprint json.dumps(odata,ensure_ascii=False)

        结果:

{"a": "你好"}

        在写入文件的时候出现了Python2.7的UnicodeEncodeError: ‘ascii' codec can't encode异常错误

        大神的解决方法: 

        不使用open打开文件,而使用codecs:

from __future__ import unicode_literalsimport codecsfp = codecs.open('output.txt', 'a+', 'utf-8')
fp.write(json.dumps(m,ensure_ascii=False))fp.close()

        关于python中文乱码的解决办法就介绍到这,上述方法仅供大家参考,希望能对大家有一定的帮助,想要了解更多python中文乱码解决技巧,大家可以继续关注其他文章。

文本转载自脚本之家

群英智防CDN,智能加速解决方案
标签: python中文乱码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服