如何通过python将北欧字符写入json文件?

时间:2018-10-17 14:11:11

标签: json python-2.7 encoding

假设我在python中有以下示例

import json

In [46]: d = {'test': u'Fors\xf8g'}

In [47]: print(d['test'])
Forsøg

In [48]: with open('da.json', 'w') as f:
    ...:         json.dump(d, f, sort_keys=True, indent=4)
    ...: 

打开该json文件,我看到以下内容。

{
    "test": "Fors\u00f8g"
}

但是我希望看到上面的印刷品带有适当的北欧字符。我该如何实现?

1 个答案:

答案 0 :(得分:1)

您看到的是100%正确的。 JSON允许仅包含ASCII字符的字符串,并且将所有“扩展”字符转义为\u + Unicode字符代码。

当您或其他任何人再次解析文件时,将显示正确的字母。实际上,您无需执行任何操作。

如果您完全不喜欢它的外观,则需要将JSON文件编写为UTF-8。这也可以,但是Python 2.7的open()不能为您提供文件编码选择(Python 3+可以)。

您可以使用codecs.open(),它可以轻松处理UTF-8文件:

import codecs
import json

d = {'test': u'Fors\xf8g'}

with codecs.open('da.json', 'w', encoding='utf8') as f:
    json.dump(d, f, sort_keys=True, indent=4, ensure_ascii=False)

由于json.dump()负责转义字符,因此我们需要告诉它不要对ensure_ascii=False执行此操作。