Я нашел ответ здесь: Python UnicodeDecodeError — я неправильно понимаю кодирование?
Мне нужно было явным образом декодироватьвходящий файл в Unicode, когда я его читал. Потому что в нем были символы, которые не подходили ни для ascii, ни для unicode. Таким образом, кодировка не удалась, когда она попала в эти символы.
Итак, я знаю, что есть что-то, чего я просто не понимаю.
У меня есть массив строк Unicode, некоторые из которых содержат символы, отличные от Ascii.
Я хочу закодировать это как json с помощью
json.dumps(myList)
Выдает ошибку
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb4 in position 13: ordinal not in range(128)
Как мне это сделать? Я пытался установить для параметра sure_ascii значения True и False, но ни один из них не решает эту проблему.
Я знаю, что передаю строки Unicode в json.dumps. Я понимаю, что строка json предназначена для юникода. Почему бы мне просто не разобраться с этим?
Что я делаю не так?
Обновление: Дон Вопрос разумно предлагает предоставить трассировку стека. Вот. :
Traceback (most recent call last):
File "importFiles.py", line 69, in
x = u"%s" % conv
File "importFiles.py", line 62, in __str__
return self.page.__str__()
File "importFiles.py", line 37, in __str__
return json.dumps(self.page(),ensure_ascii=False)
File "/usr/lib/python2.7/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 204, in encode
return ''.join(chunks)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb4 in position 17: ordinal not in range(128)
Обратите внимание, что это python 2.7, и ошибка все еще возникает с sure_ascii=False
Обновление 2: полезная ссылка Эндрю Уокера (в комментариях) заставляет меня думать, что я могу привести свои данные в удобный байтовый формат, прежде чем пытаться json.encode, выполнив что-то вроде:
data.encode("ascii","ignore")
К сожалению, это вызывает ту же ошибку.