美文网首页我爱编程
python 中的json模块以及中文编码问题

python 中的json模块以及中文编码问题

作者: 吹洞箫饮酒杏花下 | 来源:发表于2018-04-13 14:44 被阅读0次

    python中的字符串分普通字符串和unicode字符串,一般从数据库中读取的字符串会自动被转换为unicode字符串

    json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

    1.如果传入的字符串的编码不是UTF-8的话,需要用encoding指定字符编码

    对于:dataDict = json.loads(dataJsonStr);

    其中dataJsonStr是json字符串,如果其编码本身是非UTF-8的话,比如是GB2312的,那么上述代码,就会导致出错。改为对应的:

    dataDict = json.loads(dataJsonStr, encoding="GB2312");

    使用json.dumps时,一般的用法为:

    >>> obj={"name":"测试"}

    >>> json.dumps(obj)

    '{"name": "\\u6d4b\\u8bd5"}'

    >>> print json.dumps(obj)

    {"name": "\u6d4b\u8bd5"}

    >>> json.dumps(obj).encode("utf-8") 

    '{"name": "\\u6d4b\\u8bd5"}'

    可以看到这里输出的字符串为普通字符串,但是里面的内容却是unicode字符串的内容,即使对结果进行encode("utf-8") ,因为这个字符串本身就已经编码过了,所有进行encode不会有变化。要想得到字符串的真实表示,需要用到参数ensure_ascii=False(默认为True)

    >>> json.dumps(obj,ensure_ascii=False) 

    '{"name": "\xe6\xb5\x8b\xe8\xaf\x95"}'

    >>> print json.dumps(obj,ensure_ascii=False)

    {"name": "测试"}

    相关文章

      网友评论

        本文标题:python 中的json模块以及中文编码问题

        本文链接:https://www.haomeiwen.com/subject/nmtchftx.html