如何在json文件中将编码转换为普通格式

问题描述

当我将文件从python导出到json文件时,它包含像这样的字符

{"-": "text","menu": {"-": "node","id": 2244676,"prev": "[2/40] \u0d2a\u0d4d\u0d30\u0d2f\u0d4b\u0d1c\u0d15 \u0d15\u0d4d\u0d30\u0d3f\u0d2f

我用过

with open('messages.json','w') as outfile:
        json.dump(all_messages,outfile,cls=DateTimeEncoder)

在python中。如何将其转换为普通的unicode文本?

解决方法

如果您希望输出的JSON是人类可读的,请使用UTF-8编码和ensure_ascii=False参数:

with open('messages.json','w',encoding='utf8') as outfile:
        json.dump(all_messages,outfile,cls=DateTimeEncoder,ensure_ascii=False)

如果您只想再次读回数据,json.load会将其转换回Unicode:

with open('messages.json') as infile:
    data = json.load(infile)

带有简单字符串的示例:

>>> s = '[2/40] പ്രയോജക ക്രിയ'
>>> print(json.dumps(s))
"[2/40] \u0d2a\u0d4d\u0d30\u0d2f\u0d4b\u0d1c\u0d15 \u0d15\u0d4d\u0d30\u0d3f\u0d2f"
>>> print(json.dumps(s,ensure_ascii=False))
"[2/40] പ്രയോജക ക്രിയ"

>>> out = json.dumps(s)
>>> out
'"[2/40] \\u0d2a\\u0d4d\\u0d30\\u0d2f\\u0d4b\\u0d1c\\u0d15 \\u0d15\\u0d4d\\u0d30\\u0d3f\\u0d2f"'
>>> json.loads(out)
'[2/40] പ്രയോജക ക്രിയ'
,

如果您希望输出的JSON是人类可读的,请使用UTF-8编码和ensure_ascii=False参数:

with open('messages.json',ensure_ascii=False)

如果您只想再次读回数据,json.load会将其转换回Unicode:

with open('messages.json',encoding='utf8') as infile:
    data = json.load(infile)