Как написать нордические символы в файл JSON из Python? - PullRequest
0 голосов
/ 17 октября 2018

Предположим, у меня есть следующий пример на 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 голосов
/ 17 октября 2018

То, что вы видите, на 100% правильно.JSON допускает строки, которые содержат только символы ASCII и экранируют все «расширенные» символы как \u + код символа Unicode.

Когда вы или кто-либо еще проанализируете файл снова, появится правильная буква.На самом деле вам ничего не нужно делать.

Если вам абсолютно не нравится, как это выглядит, вам нужно написать файл JSON в формате UTF-8.Это тоже работает, но Python 2.7 open() не дает вам выбора кодировки файлов (Python 3+ делает).

Вы можете использовать codecs.open(), что позволяет легко обрабатывать UTF-8files:

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.

...