python json.dumps中文乱码,dump文件乱码
JSON。Dumps (var,guarantee _ ascii=false)无法解决中文乱码问题。
Json.dumps在不同版本的Python中会有不同的表现。注意,下面提到的中文乱码问题在Python版本3中是不存在的。
注:以下代码在Python版下测试通过。
#-*-编码:utf-8-*-
Odata={a 3360 Hello}
打印数据结果
{ a : xe4 xbd xa0 xe5 xa5 xbd }
1printjson.dumps(odata)结果
{ a : }
1 printjson.dumps (odata,guarantee _ ascii=false)结果
{ 一个 3360 }
1 printjson.dumps (odata,guarantee _ ascii=false)。解码( utf8 )。编码( gb2312 )结果
{a: Hello}要解决中文编码,你需要知道python2.7如何处理字符串:
因为#-编码: utf-8-,文件内容是用utf-8编码的,所以打印odata
输出是utf-8编码的结果{ a : xe4 xbd xa0 xe5 xa5 xbd }
json.dumps序列化时,中文默认使用Ascii编码,print json.dumps(odata)输出unicode编码的结果。
打印JSON。Dumps (odata,guarantee _ ascii=false)是一个未使用的ascii码,用gbk编码。
“Hello”由utf8编码,由gbk解码。
Python中字符串的表示是unicode编码。
因此,在编码转换过程中,通常使用unicode作为中间编码,即先将其他编码的字符串解码成unicode,然后再编码成另一种编码。
Decode用于将其他编码字符串转换为unicode编码。
Decode(utf-8 )表示将utf-8编码的字符串转换为unicode编码。
Encode用于将unicode编码转换为其他编码字符串。
Encode (gb2312 ),这意味着将unicode编码的字符串转换为gb2312编码。
python3不存在这个问题。最简单的方法就是引入__future__模块,将新版本的特性导入到当前版本中。
from _ _ future _ _ hurdico de _ literals
打印json.dumps (odata,guarantee _ ascii=false)结果
{A 3360 Hello}写入文件时出现Python2.7的unicode encoderror : ASCII CodecCan teen code异常。
大神的解决方案:
打开文件,但不打开,而是使用编解码器:
from _ _ future _ _ hurdico de _ literals
导入编解码器
fp=codecs.open(output.txt , a , utf-8 )
fp.write(json.dumps(m,确保_ascii=False))
fp.close()
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。