Вопрос задан
Изменён 10 месяцев назад
Просмотрен 45k раз
При попытке форматированного вывода JSON с помощью dump
, перестают отображаться русские символы. Появляется что-то типа «произвольное поле, например Address»: «\u0443\u043b\u0438\u0446\u0430 \u041c\u0430 и т.д.»
Пробовал json.dumps().encode("utf8")
и codac convert
— ничего не помогает.
def load_data(filepath): with open(filepath, 'r', encoding='utf-8') as fh: data = json.load(fh) # загружаем из файла данные в словарь data return data def pretty_print_json(data): inf = json.dumps(data,sort_keys=False,indent=4, separators=(',', ': ')) return inf
0
Воспользуйтесь параметром ensure_ascii=False:
Из документации:
If
ensure_ascii
is true (the default), the output is guaranteed to have all incoming non-ASCII characters escaped. Ifensure_ascii
is false, these characters will be output as-is.
Пример:
In [41]: with open(fn, 'r', encoding='utf-8') as f: ...: data = json.load(f) ...: ...: print(json.dumps(data, ...: sort_keys=False, ...: indent=4, ...: separators=(',', ': '))) ...: { "\u043f\u0440\u0438\u043c\u0435\u0440": { "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a": "\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043b\u043e\u0432\u0430\u0440 \u044f", "\u0441\u043f\u0438\u0441\u043e\u043a": [ "\u044d\u043b\u0435\u043c\u0435\u043d\u0442 1", "\u044d\u043b\u0435\u043c\u0435\u043d\u0442 2" ] } } In [42]: print(json.dumps(data, ...: sort_keys=False, ...: indent=4, ...: ensure_ascii=False, ...: separators=(',', ': '))) ...: { "пример": { "Заголовок": "пример словаря", "список": [ "элемент 1", "элемент 2" ] } }
JSON file:
{ "пример": { "Заголовок": "пример словаря", "список": ["элемент 1", "элемент 2"] } }
1
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Почта
Необходима, но никому не показывается
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Հայերեն —
Башҡорт — Беларуская — Български —
Иронау —
Қазақша —
Кыргызча — Македонски —
Монгол
Нохчийн — O’zbek — Русский — Slovensky — Српски — Татарча — Тоҷикӣ — Українська — Чaваш — Français — English
The resulting text will be displayed here…
Guestbook Please link to this site! | Custom Work For a small fee I can help you quickly recode/recover large pieces of data — texts, databases, websites… or write custom functions you can use (invoice available). FAQ and contact information. |
Welcome! You may find this site useful, if you have recieved some texts that you believe are written in the Cyrillic alphabet, but instead are displayed in some strange combination of bizarre characters. This program will try to guess the encoding, and if it does not, it will show samples, examples of all encoding-combinations, so as you will be able to select the good one.
Please notice that this freeware program is created with the hope that it would be useful, but has no warranty, not even an implied warranty for fitness for any particular use. Please use it at your own risk.
If you have very long texts to translate, please make sure you have a backup copy.
Back to the Latin to Cyrillic convertor.
В этой статье мы ответим на следующие часто задаваемые вопросы о работе с данными Unicode JSON в Python.
\u
(пример: сохранить строку Unicode ø
как есть вместо \u00f8
в JSON1 4) utf-8
. ø
как \u00f8
в JSON ) , UTF-16 или UTF-32, причем UTF-8 рекомендуется по умолчанию для максимальной совместимости.Параметр sure_ascii
Использование Встроенный модуль Python json предоставляет методы json.dump() и json.dumps() для кодирования объектов Python в данные JSON.
json.dump()
и json.dumps()
имеют параметр sure_ascii
. sure_ascii
по умолчанию имеет значение true, поэтому в выходных данных гарантированно будут экранированы все входящие символы, отличные от ASCII. Если sure_ascii=False
, эти символы будут выводиться как есть.
Модуль json всегда создает объекты str
. Вы возвращаете строку, а не строку Unicode. Поскольку экранирование разрешено JSON.
sure_ascii=True
, мы можем представить безопасный способ представления символов Unicode. Установив значение true, мы удостоверимся, что полученный JSON является допустимым символом ASCII (даже если он содержит Unicode внутри). sure_ascii=False
, мы гарантируем, что полученный JSON сохранит символы Unicode как есть вместо управляющей последовательности \u
.В этом примере мы попытаемся закодировать данные Unicode в JSON. Это решение полезно, когда вы хотите выводить символы Unicode как символы, а не escape-последовательности.
Установить sure_ascii=False
в json. dumps()
для кодирования Unicode как есть в JSON
import json юникоддата = { «string1»: «明彦», "строка2": u"\u00f8" } print("Данные юникода ", unicodeData) encodedUnicode = json.dumps(unicodeData, sure_ascii=False) # используйте метод dump() для записи в файл print("Кодировка символов JSON при установке sure_ascii=False", encodedUnicode) print("Декодирование JSON", json.loads(encodedUnicode))
Вывод :
Юникод Данные {'string1': '明彦', 'string2': 'ø'} Кодировка символов JSON с помощью параметра sure_ascii=False {"string1": "明彦", "string2": "ø"} Декодирование JSON {'string1': '明彦', 'string2': 'ø'}
Примечание . Этот пример полезен для хранения строки Unicode как есть в JSON.
В приведенном выше примере мы увидели, как сохранить данные, отличные от ASCII или Unicode, как есть, а не как escape-последовательность \u в JSON. Теперь давайте посмотрим, как записать сериализованные данные Unicode в формате JSON как есть в файл.
импорт json SampleDict = { «string1»: «明彦», "строка2": u"\u00f8" } с open("unicodeFile.json", "w", encoding='utf-8') как write_file: json.dump(sampleDict, write_file, sure_ascii=False) print("Завершена запись сериализованных данных Unicode в формате JSON как есть в файл") с open("unicodeFile.json", "r", encoding='utf-8') как read_file: print("Чтение JSON сериализованных данных Unicode из файла") sampleData = json.load(read_file) print("Декодированные JSON сериализованные данные Unicode") print(sampleData["строка1"], sampleData["строка1"])
Вывод :
Выполнена запись сериализованных данных Unicode JSON как есть в файл Чтение сериализованных данных Unicode JSON из файла Декодированные сериализованные данные Unicode в формате JSON 明彦 明彦Файл JSON после записи данных Unicode как есть
Вы также можете установить кодировку JSON в UTF-8. UTF-8 является рекомендуемым значением по умолчанию для максимальной совместимости. установите sure_ascii = False
и закодируйте данные Unicode в JSON, используя ‘ UTF-8 ‘.
импорт json # кодировка в UTF-8 юникоддата = { «string1»: «明彦», "строка2": u"\u00f8" } print("Данные юникода ", unicodeData) print("Кодировка данных Unicode JSON с использованием utf-8") encodedUnicode = json.dumps(unicodeData, sure_ascii=False).encode('utf-8') print("Кодировка символов JSON при установке sure_ascii=False", encodedUnicode) print("Декодирование JSON", json.loads(encodedUnicode))
Вывод :
unicode Данные: {'string1': '明彦', 'string2': 'ø'} Кодировка данных Unicode JSON с использованием utf-8 Кодировка символов JSON, установив sure_ascii=False b'{"string1": "\xe6\x98\x8e\xe5\xbd\xa6", "string2": "\xc3\xb8"}' Декодирование JSON {'string1': '明彦', 'string2': 'ø'}
В этом примере мы увидим, как кодировать словарь Python в JSON который содержит как данные Unicode, так и данные ASCII.
импорт json sampleDict = {"name": "明彦", "age": 25} print("Данные Юникода ", sampleDict) # установить sure_ascii=Истина jsonDict = json.dumps(sampleDict, sure_ascii=True) print("Кодировка символов JSON с помощью параметра sure_ascii=True") печать (jsonDict) print("Декодирование JSON", json.loads(jsonDict)) # установить sure_ascii = False jsonDict = json.dumps(sampleDict, sure_ascii=False) print("Кодировка символов JSON при установке sure_ascii=False") печать (jsonDict) print("Декодирование JSON", json.loads(jsonDict)) # установите sure_ascii=False и закодируйте с помощью utf-8 jsonDict = json.dumps(sampleDict, sure_ascii=False).encode('utf-8') print("Кодировка символов JSON с помощью настройки sure_ascii=False и UTF-8") печать (jsonDict) print("Декодирование JSON", json.loads(jsonDict))
Выход :
Юникод Данные {'имя': '明彦', 'возраст': 25} Кодировка символов JSON, установив sure_ascii=True {"имя": "\u660e\u5f66", "возраст": 25} Декодирование JSON {'имя': '明彦', 'возраст': 25} Кодировка символов JSON, установив sure_ascii=False {"имя": "明彦", "возраст": 25} Декодирование JSON {'имя': '明彦', 'возраст': 25} Кодировка символов JSON с помощью настройки sure_ascii=False и UTF-8 b'{"имя": "\xe6\x98\x8e\xe5\xbd\xa6", "возраст": 25}' Декодирование JSON {'имя': '明彦', 'возраст': 25}
Давайте посмотрим, как сохранить все входящие не-ASCII-символы, экранированные в JSON. Это безопасный способ представления символов Unicode. Установив sure_ascii=True
, мы удостоверимся, что полученный JSON является допустимым символом ASCII (даже если он содержит Unicode внутри).
импорт json юникоддата = { «string1»: «明彦», "строка2": u"\u00f8" } print("Данные юникода ", unicodeData) # установить sure_ascii=Истина encodedUnicode = json.dumps(unicodeData, sure_ascii=True) print("Кодировка символов JSON с помощью параметра sure_ascii=True") печать (в кодировке Unicode) print("Расшифровка JSON") печать (json.loads (encodedUnicode))
Выход :
Юникод Данные {'string1': '明彦', 'string2': 'ø'} Кодировка символов JSON, установив sure_ascii=True {"строка1": "\u660e\u5f66", "строка2": "\u00f8"} Декодирование JSON {'string1': '明彦', 'string2': 'ø'}
Редактировать
Visual Studio Code по умолчанию поставляется с английским языком в качестве языка отображения, а другие языки зависят от расширений языковых пакетов, доступных в Marketplace.
VS Code определяет язык пользовательского интерфейса операционной системы и предлагает установить соответствующий языковой пакет, если он доступен в Marketplace. Ниже приведен пример, рекомендующий языковой пакет для упрощенного китайского языка:
После установки расширения языкового пакета и запроса на перезагрузку VS Code будет использовать языковой пакет, соответствующий языку пользовательского интерфейса вашей операционной системы.
Примечание . В этом разделе объясняется, как изменить язык отображения в пользовательском интерфейсе VS Code с помощью языковых пакетов, таких как французский или китайский. Если вы хотите добавить поддержку языка программирования, например, для C++ или Java, обратитесь к разделу документации «Языки программирования».
Вы также можете переопределить язык пользовательского интерфейса по умолчанию, явно задав язык отображения VS Code с помощью команды Configure Display Language .
Нажмите ⇧⌘P (Windows, Linux Ctrl+Shift+P), чтобы открыть палитру команд , затем начните вводить «display», чтобы отфильтровать и отобразить команду Configure Display Language .
Нажмите Enter, и отобразится список установленных языков по локали с текущими локаль
выделена.
Используйте опцию Установить дополнительные языки… , чтобы установить дополнительные языковые пакеты из Marketplace, или выберите другую локаль
из списка. Для изменения локали
требуется перезапуск VS Code. Вам будет предложено перезагрузиться, когда вы выберете локаль
.
Команда Configure Display Language записывает в файл аргументов конфигурации среды выполнения argv.json
в вашей пользовательской папке VS Code ( .vscode
).
Языковой стандарт
также можно изменить, отредактировав файл argv. json
напрямую ( Preferences: Configure Runtime Arguments ) и перезапустив VS Code.
Язык интерфейса | Региональный стандарт |
---|---|
Английский (США) | и |
Упрощенный китайский | ж-сп |
Традиционный китайский | ж-тв |
Французский | передняя |
немецкий | от |
итальянский | это |
Испанский | ес |
Японский | и |
Корейский | ко |
Русский | ru |
Португальский (Бразилия) | пт-бр |
Турецкий | тр |
польский | стр. |
Чехия | кс |
Как описано выше, VS Code поставляется с английским языком интерфейса по умолчанию, но другие языки доступны через языковые пакеты Marketplace.
Вы можете искать языковые пакеты в представлении «Расширения» (⇧⌘X (Windows, Linux Ctrl+Shift+X)) путем ввода искомого языка вместе с категорией: «Языковые пакеты»
.
Вы можете установить несколько языковых пакетов и выбрать текущий язык интерфейса с помощью команды Configure Display Language .
Если вы хотите использовать определенный язык для сеанса VS Code, вы можете использовать переключатель командной строки --locale
, чтобы указать локаль при запуске VS Code.
Ниже приведен пример использования параметра командной строки --locale
для установки французского языка интерфейса VS Code:
code . --locale=фр.
Примечание : у вас должен быть установлен соответствующий языковой пакет для языка, который вы укажете с помощью переключателя командной строки. Если соответствующий языковой пакет не установлен, VS Code будет отображать английский язык.
Это уведомление может означать, что ваш файл argv.json
не был сохранен после предыдущего изменения. Проверьте, нет ли ошибок в файле ( Preferences: Configure Runtime Arguments ), убедитесь, что файл сохранен, и попробуйте снова установить языковой пакет.
Да, проект локализации сообщества Visual Studio Code открыт для всех, участники могут предоставлять новые переводы, голосовать за существующие переводы или предлагать улучшения процесса.