Python: обрабатывать сломанные байты unicode при разборе строки JSON

Мой код создает некоторый контент с сайта UserVoice. Как вы знаете, UserVoice – это дерьмовое программное обеспечение, которое не может правильно обрабатывать данные; действительно, чтобы уменьшить количество текста на странице поиска, они разрезают текст, скажем, 300 символов, а затем добавляют «…» до конца. Дело в том, что они не заботятся обрезать середину многобайтового символа , в результате чего получается частичный байт utf-8 ": например. для символа è я получил \xc3 вместо \xc3\xa8s .

Конечно, когда я даю этот ужасный суп json.loads , он терпит неудачу с UnicodeDecodeError . Поэтому мой вопрос прост: как я могу попросить json.loads игнорировать эти плохие байты , как это было бы с использованием .decode('utf-8', 'ignore') если бы у меня был доступ к внутренним функциям функции?

Благодарю.

2 Solutions collect form web for “Python: обрабатывать сломанные байты unicode при разборе строки JSON”

Вы не просите простых людей игнорировать их. Когда у меня возникла подобная проблема, как у вас, я просто запустил .decode('utf-8', 'ignore').encode('utf-8') и продолжайте.

Просто передайте строку Unicode в json.loads() :

 >>> badstr = "qualité"[:-1]+".." >>> badstr 'qualit\xc3..' >>> json_str = '["%s"]' % badstr >>> import json >>> json.loads(json_str) Traceback (most recent call last): ... UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 6: invalid \ continuation byte >>> json.loads(json_str.decode('utf-8','ignore')) [u'qualit..'] 
  • Вывод кода Python и Unicode
  • os.listdir удаляет характерный акцент
  • Как обрабатывать строку ASCII как unicode и unescape экранированные символы в ней в python?
  • Python: удаление определенного символа (u "\ u2610") из строки
  • Строка строк Python () удаляет определенные управляющие символы Unicode
  • time.strptime () - аргумент 0 должен быть str, а не байтами
  • В Python, как перечислять все символы, соответствующие расширенному регулярному выражению POSIX ``?
  • Преобразование формата unicode в формат datetime в формате strptime
  • Python - лучший язык программирования в мире.