#-*-encoding:utf-8-*- import json d = {'info':'你好,world', 'isChecked':True} print d j = json.dumps(d) print j
输出为:
{'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', 'isChecked': True} {"info": "\u4f60\u597d,world", "isChecked": true}
第一行输出字典变量d时,"你好"显示为utf-8编码,第二行输出中"你好"显示为unicode编码。第二行输出是一个字符串,所以肯定是希望其输出“正常点”,于是可以这样做:
#-*-encoding:utf-8-*- import json d = {'info':'你好,world', 'isChecked':True} print d j = json.dumps(d, ensure_ascii=False) print j运行后输出如下:
{'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', 'isChecked': True} {"info": "你好,world", "isChecked": true}好了,正常了。
#-*-encoding:utf-8-*- import json d = {'info':'你好,world', 'isChecked':True} print d j = json.dumps(d, ensure_ascii=False) print j d2 = json.loads(j) ##或者d2 = json.loads(j, encoding='utf-8') print d2注意,如果字符串j编码不是utf-8或者unicode,用在loads函数中encoding指定j的编码。
{'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', 'isChecked': True} {"info": "你好,world", "isChecked": true} {u'info': u'\u4f60\u597d,world', u'isChecked': True}
d2是转换后的字典,可以看到"你好"被转换成了unicode形式,而非utf-8,同时连“键”也被转换为了unicode。
由json字符串转换为python对象,处理python对象时候要注意编码问题,比如:
#-*-encoding:utf-8-*- import json d = {'info':'你好,world', 'isChecked':True, '姓名':'樂天'} print d j = json.dumps(d, ensure_ascii=False) print j d2 = json.loads(unicode(j)) print d2 print d2['info'] # 正常 print d2[u'info'] # 正常 print d2['姓名'] # 报错 print d2[u'姓名'] # 正常
d2['info'] = d2['info'].encode('utf-8') print d2
{u'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', u'isChecked': True}