python json.dumps 中文编码

Python版本: 2.7

#coding=utf-8
import json

dic = {"a":"中国"}
print dic 
# {'a': '\xe4\xb8\xad\xe5\x9b\xbd'}

print print json.dumps(dic) 
#{"a": "\u4e2d\u56fd"}

print json.dumps(dic,ensure_ascii=False)
#{"a": "中国"}
  • 首行#coding=utf-8,表示文件内容以utf-8编码,因此print dic的输出结果就是utf-8编码的结果: {'a': '\xe4\xb8\xad\xe5\x9b\xbd'}
  • json.dumps 进行序列化时,默认使用ascii编码, print json.dumps(dic)输出unicode编码的结果: {"a": "\u4e2d\u56fd"}
  • json.dumps(dic,ensure_ascii=False),不使用ascii编码,输出结果为:{"a": "中国"}

但是有时也碰到 json.dumps(m,ensure_ascii=False)之后依旧是乱码的格式,可采取下面方式处理:

#coding=utf-8
import json 

dic = {"a":"中国"}
print json.dumps(dic,ensure_ascii=False).decode("utf-8").encode("gb2312") #{"a":"中国"}
 

在Python2.7内部,字符串一般有两种类型:unicode和str(str为字节码,会根据某种编码【文件开头可通过#coding=XXX方式指定】方式把字符串转成一个个字节,unicode则是用unicode编码的字符串。直接赋值字符串,类型为str,在字符串前面加一个u,则变为unicode)。在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

  • decode的作用对str类型进行decode,得到unicode类型。也即是str -> decode(根据指定编码) -> unicode.
  • encode的作用对unicode进行encode,得到得到字节串str类型。也即是unicode -> encode(根据指定编码) -> str.

 

posted @ 2018-08-21 16:02  前进者^_^  阅读(31068)  评论(2编辑  收藏  举报