python处理json中的unicode中文编码问题.

大概就是从服务器接口传回一个josn格式的包
{"from":"en","to":"zh","trans_result":[{"src":"East Berlin, 1975","dst":"\u4e1c\u67cf\u6797\uff0c1975"}]}
这个样子,然后我用eval()处理了这个包

u = response.read() #从服务器接口传回的
dict_mid = eval(u) #这里通过eval()将这个包变成了字典
dict_trans = dict_mid.get('trans_result') #然后得到trans_result中的值,值是一个列表,只有一个元素就是{"src":"East Berlin, 1975","dst":"\u4e1c\u67cf\u6797\uff0c1975"}
dict_trans_mid = dict_trans[0] #然后获得这个元素...大牛原谅这种笨重的处理
result_mid = dict_trans_mid.get('dst') #然后这个元素呢又是一个字典,就又获得dst的值
result = (unicode(result_mid, 'utf8')).encode("UTF-8") #想把这个\u4e1c\u67cf\u6797\uff0c1975编码成utf8,然后输出
print result #可是输出结果还是\u4e1c\u67cf\u6797\uff0c1975

假如把这个\u4e1c\u67cf\u6797\uff0c1975复制到终端python里面

print (u'\u4e1c\u67cf\u6797\uff0c1975').encode("UTF-8")

是可以获得中文输出的
所有来问问各位大牛,怎么在程序中输出中文

阅读 43.2k
3 个回答

由于我用的Python3.X,所以直接打印出来就行了……
即便你使用的是Python2.X,也还有救。可以使用__future__模块嘛~

你获得的u是json格式吧?如果是的话dict_mid = eval(u) 这里不要使用eval来转化为字符串,试试用json.loads(u)

import json
u = response.read()
ju = json.loads(u)
result_mid = ju['trans_result']['dst']
# 这里可以先使用type(result_mid)看一下它是不是一个unicode,如果是的话再用encode转成你想要的编码
print result_mid.encode("UTF-8")

如果你在windows下的话打印出来的应该是乱码,在cmd中要使用encode('gbk')来打印

我觉得你上面的问题出在使用eval(u)函数,你使用eval后要将得到的json转化为了字典,但是也将里面的'\u4e1c\u67cf\u6797\uff0c1975'类型转变了string,但是使用json.loads()可以将'\u4e1c\u67cf\u6797\uff0c1975'转化成unicode类型u'\u4e1c\u67cf\u6797\uff0c1975'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题