Что лучший способ состоит в том, чтобы загрузить Строки 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)
Я преобразовал строку в строку 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)
И тогда ошибка не генерировалась.
ОП уточняет (в комментарии!)...:
Исходные данные - это огромная закодированная в юникоде string
Тогда вам нужно знать, какую из множества кодировок юникода он использует - явно не 'utf-16', поскольку она не сработала, но есть множество других - 'utf-8', 'iso-8859-15' и так далее. Вы либо пробуете их все, пока одна не сработает, либо печатаете repr(str_to_load[:80])
и вставляете то, что он показывает в качестве редактирования вашего вопроса, чтобы мы могли гадать от вашего имени!)