最近解决项目中遇到的python输出中文乱码问题,记录一下。
- 后端response content-type为application/json,python直接print显示没有问题
- 因需要使用JSON中部分字段内容,通过JSON load为dict后再输出就乱码
conn = httplib.HTTPConnection(ip, port) conn.request('POST', url, params) response = conn.getresponse() # 此处获取后后端返回的JSON字符串 response_text = response.read() # JSON load 后变为dict类型,由于python2.x内部采用ASCII编码,此时中文已变成u'\xxxx'形式 json_dict = json.load(response_text ) # 按照默认参数将dict转换为string,中文已变成ASCII码形式 json_string = json.dumps(json_dict ) # 指定ensure_ascii=False, 所有的非ASCII码字符都不会被转义,以unicode字符形式输出 json_string = json.dumps(json_dict, ensure_ascii=False) #上述方式直接print时不存在问题,在class 中 __str__ (类似于Java toString())方法中却行不通 # 按照UTF-8编码方式对unicode字符进行编码 json_string = json.dumps(json_dict, ensure_ascii=False).encode("utf-8") # 得到与原始值相同的输出内容 print json_string
# 具体请参考json.dumps() 函数说明
https://docs.python.org/2/library/json.html
json. dumps (obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)Serialize obj to a JSON formatted |
# 示例如下: