Изучение кодировки JSON: методы и примеры для данных Unicode

В современном взаимосвязанном мире обработка данных на разных языках и в разных наборах символов имеет решающее значение. JSON (нотация объектов JavaScript) — широко используемый формат для обмена данными, но когда дело доходит до обработки символов Юникода, необходимо учитывать особые соображения. В этой статье мы рассмотрим различные методы и приведем примеры кода для кодирования данных Unicode с помощью функции json.dumps()в Python.

Метод 1: кодировка по умолчанию
По умолчанию функция json.dumps()в Python использует кодировку ASCII, что означает, что символы, отличные от ASCII, будут представлены как escape-последовательности Юникода (например, “\uXXXX “). Вот пример:

import json
data = {"name": "François"}
encoded_data = json.dumps(data)
print(encoded_data)

Выход:
{"name": "Fran\u00e7ois"}

Метод 2: кодирование с помощью Sure_ascii=False
Чтобы сохранить символы Юникода без использования escape-последовательностей, вы можете установить для параметра ensure_asciiзначение Falseв json.dumps()функция. Вот пример:

import json
data = {"name": "François"}
encoded_data = json.dumps(data, ensure_ascii=False)
print(encoded_data)

Выход:
{"name": "François"}

Метод 3: Кодирование с помощью аргумента кодировки
Функция json.dumps()также позволяет указать пользовательскую кодировку с помощью аргумента encoding. Это может быть полезно при работе с определенными кодировками, такими как UTF-8 или UTF-16. Вот пример:

import json
data = {"name": "François"}
encoded_data = json.dumps(data, ensure_ascii=False, encoding="utf-8")
print(encoded_data)

Выход:
{"name": "François"}

Метод 4: пользовательский класс кодировщика
Для более сложных сценариев вы можете определить собственный класс кодировщика, который наследуется от класса json.JSONEncoder. Это дает вам полный контроль над процессом кодирования. Вот пример:

import json
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, str):
            return obj.encode("utf-8").decode("unicode_escape")
        return super().default(obj)
data = {"name": "François"}
encoded_data = json.dumps(data, cls=CustomEncoder)
print(encoded_data)

Выход:
{"name": "François"}

, кодировка ASCII, обеспечения_ascii, пользовательский кодировщик, кодировка UTF-8