带有重音符号的Python转储json [重复]

Posted

技术标签:

【中文标题】带有重音符号的Python转储json [重复]【英文标题】:Python dump json with accents [duplicate] 【发布时间】:2014-11-11 16:40:07 【问题描述】:

如何打印带有“à”或“ç”等特殊字符的 json?

我可以这样打印:

import json

weird_dict ="person": "ç", "á": 'à', "ç": 'ã'
print json.dumps(weird_dict, indent=4, sort_keys=True)

output:


    "person": "\u00e7", 
    "\u00e1": "\u00e0", 
    "\u00e7": "\u00e3"

如果我使用 'ensure_ascii=False'

weird_dict="person": "ç", "á": 'à', "ç": 'ã'
print json.dumps(weird_dict, indent=4, sort_keys=True, ensure_ascii=False)
output:

    "person": "ç", 
    "á": "à", 
    "ç": "ã"

如何使用 json 解决特殊字符问题?当我使用 pystache 并尝试打印时,我需要进行渲染

"'ascii' codec can't decode byte 0xc3 in position 4770: ordinal not in range(128)"

【问题讨论】:

哪个版本的 Python?那些是 Unicode 字符串吗? weird_json 不是 JSON,而是 Python 字典。 @Joe:输出 JSON。 @MartijnPieters 对不起。我声称午后失明。 @Joe:当然;我认为 OP 只是试图说明输出。 【参考方案1】:

指定ensure_ascii=False 参数:

>>> import json
>>>
>>> d = "person": "ç", "á": 'à', "ç": 'ã'
>>> print json.dumps(d, indent=4, sort_keys=True, ensure_ascii=False)

    "person": "ç",
    "á": "à",
    "ç": "ã"

根据json module documentation:

如果 ensure_ascii 为 True(默认值),则 输出使用 \uXXXX 序列进行转义,结果是 str 仅由 ASCII 字符组成的实例。 如果 ensure_ascii 是 错误,一些写入 fp 的块可能是 unicode 实例。这 通常发生是因为输入包含 unicode 字符串或 使用编码参数。除非 fp.write() 明确理解 unicode(如在 codecs.getwriter() 中)这可能会导致错误。

【讨论】:

以上是关于带有重音符号的Python转储json [重复]的主要内容,如果未能解决你的问题,请参考以下文章

(Obj-C) 从 NSHTTPURLResponse (allHeaderFields) 解码带有重音符号的 JSON

Python:替换重音符号(é 到 e)、删除 [^a-zA-Z\d\s] 和 lower() 的有效方法 [重复]

在 ASCII/UTF8 中转换带有重音符号的 Unicode 字母

在 Python 中,如何对包含重音符号的数据框进行排序?

比较2个字符串而不考虑Python中的重音[重复]

用 gsub 替换带有重音符号的多个字母