带有重音的Python转储json

时间:2014-09-17 14:59:29

标签: python json pystache

如何将带有特殊字符的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并尝试打印pystache.render('嗨{{person}}!',weird_dict)它发生在我身上:

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

1 个答案:

答案 0 :(得分:10)

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