python json.dumps 中文编码

匿名 (未验证) 提交于 2019-12-02 22:56:40

json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题

python 2.7版本

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

最近接触python,遇到这个问题,上网查资料,基本上都是说json.dumps(var,ensure_ascii=False)可以解决中文编码问题,然而并没有。

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

  • 由于# -- coding: utf-8 -
    输出的是utf-8编码后的结果{‘a’: ‘\xe4\xbd\xa0\xe5\xa5\xbd’}

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


  • 字符串在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_literals  print json.dumps(m,ensure_ascii=False)  =>{"a": "你好"}
  • 1
  • 2
  • 3
  • 4
  • 5

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


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

from __future__ import unicode_literals import codecs fp = codecs.open('output.txt', 'a+', 'utf-8') fp.write(json.dumps(m,ensure_ascii=False)) fp.close() 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
文章标签:python编码

json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题

python 2.7版本

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

最近接触python,遇到这个问题,上网查资料,基本上都是说json.dumps(var,ensure_ascii=False)可以解决中文编码问题,然而并没有。

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

  • 由于# -- coding: utf-8 -
    输出的是utf-8编码后的结果{‘a’: ‘\xe4\xbd\xa0\xe5\xa5\xbd’}

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


  • 字符串在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_literals  print json.dumps(m,ensure_ascii=False)  =>{"a": "你好"}
  • 1
  • 2
  • 3
  • 4
  • 5

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


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

from __future__ import unicode_literals import codecs fp = codecs.open('output.txt', 'a+', 'utf-8') fp.write(json.dumps(m,ensure_ascii=False)) fp.close() 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!