Парсинг unicode вход с помощью Python json.loads

Что лучший способ состоит в том, чтобы загрузить Строки JSON в Python?

Я хочу использовать json.loads для обработки unicode как это:

import json
json.loads(unicode_string_to_load)

Я также пытался предоставить параметр 'кодирования' значение 'utf-16', но ошибка не ушла.

Полный SSCCE с ошибкой:

# -*- coding: utf-8 -*-
import json
value = '{"foo" : "bar"}'
print(json.loads(value)['foo'])     #This is correct, prints 'bar'

some_unicode = unicode("degradé")  
#last character is latin e with acute "\xe3\xa9"
value = '{"foo" : "' + some_unicode + '"}'
print(json.loads(value)['foo'])            #incorrect, throws error

Ошибка:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 
6: ordinal not in range(128)
16
задан Eric Leschinski 8 August 2016 в 21:18
поделиться

2 ответа

Я преобразовал строку в строку Unicode с помощью 'latin-1', исправил ошибку:

UnicodeDecodeError: 'utf16' codec can't decode byte 0x38 in 
position 6: truncated data

Исправленный код:

import json

ustr_to_load = unicode(str_to_load, 'latin-1')

json.loads(ustr_to_load)

И тогда ошибка не генерировалась.

9
ответ дан 30 November 2019 в 22:10
поделиться

ОП уточняет (в комментарии!)...:

Исходные данные - это огромная закодированная в юникоде string

Тогда вам нужно знать, какую из множества кодировок юникода он использует - явно не 'utf-16', поскольку она не сработала, но есть множество других - 'utf-8', 'iso-8859-15' и так далее. Вы либо пробуете их все, пока одна не сработает, либо печатаете repr(str_to_load[:80]) и вставляете то, что он показывает в качестве редактирования вашего вопроса, чтобы мы могли гадать от вашего имени!)

6
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: