Загрузить JSON в Python как набор символов заголовка - PullRequest
1 голос
/ 03 мая 2010

Я всегда находил наборы символов и кодировки сложными для понимания, и здесь я столкнулся с другой проблемой. Мои извинения за любые неточности. Я сделаю все возможное.

Я запрашиваю данные с сервера, который возвращает JSON. В заголовках HTTP он также возвращает набор символов следующим образом:

Content-Type: text/html; charset=UTF-8

Я использую библиотеку JSON в Python для загрузки JSON с помощью метода json.loads. Когда я передаю ему возвращенный JSON, он дает мне словарь в Unicode. Я гуглил и знаю, что JSON должен возвращать Unicode, поскольку строки JavaScript являются объектами Unicode. Как я могу загрузить JSON как UTF-8? Я хотел бы использовать ту же кодировку, которая указана в заголовке ответа.

Я прочитал этот пост, но это не помогло.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 мая 2010

От заявка / JSON RFC :

Текст JSON ДОЛЖЕН быть закодирован в Unicode. Кодировка по умолчанию - UTF-8.

Поскольку первые два символа текста JSON всегда будут символами ASCII [RFC0020], можно определить, является ли поток октетов UTF-8, UTF-16 (BE или LE) или UTF-32 (BE или LE), взглянув на шаблон нулей в первых четырех октетах.

       00 00 00 xx  UTF-32BE
       00 xx 00 xx  UTF-16BE
       xx 00 00 00  UTF-32LE
       xx 00 xx 00  UTF-16LE
       xx xx xx xx  UTF-8

Таким образом, учитывая текст json в качестве строки байтов, всегда можно преобразовать его в строку Unicode. По заданной строке юникода вы можете при желании преобразовать ее в другую строку байтов, используя любую понравившуюся вам кодировку.

json.loads() использует указанную кодировку (по умолчанию 'utf-8'). если входная кодировка не основана на ASCII, то текст должен быть вручную преобразован в Unicode перед передачей его в json.loads().

2 голосов
/ 03 мая 2010

json.loads автоматически обрабатывает str с, которые передаются ему в UTF-8, поэтому в этом конкретном случае вам не нужно беспокоиться о кодировках самостоятельно. loads уже преобразует из UTF-8 в представление Python UCS-2 Unicode для вас.

Если у вас нет другой причины, по которой вам действительно нужно работать с исходным UTF-8, вы должны чувствовать себя хорошо, даже если вы проходите str и возвращаетесь unicode с. Вы также можете указать входную кодировку в качестве второго параметра для loads, если хотите быть уверенным или имеете дело с различными кодировками.

...