Кодирование и декодирование специальных символов (Latin-1)

Я пытаюсь очистить некоторые странные символы юникода после разбора HTML, но все еще не конвертирую эти юникоды.

Оригинальный текст:

raw = 'If further information is needed, don´t hesitate to contact us. Kind regards, José Ramirez.'

После кодирования и декодирования:

text = str(raw.encode().decode('unicode_escape'))

Текущий выход:

'If further information is needed, donÃ\x82´t hesitate to contact us. Kind regards, JosÃ\x83© Ramirez'

Желаемый результат:

'If further information is needed, don´t hesitate to contact us. Kind regards, José Ramirez'

person Lucas Mengual    schedule 01.08.2019    source источник


Ответы (1)


Вы делаете это неправильно. Эффект от вашего raw.encode().decode('unicode_escape') такой же, как и от raw.encode('utf-8').decode('latin-1'). Чего вы действительно хотите:

>>> raw.encode('latin-1').decode('utf-8')
'If further information is needed, don´t hesitate to contact us. Kind regards, José Ramirez.'

Ваша строка исходит от кого-то, кто взял текст в кодировке UTF-8, но предположил, что это Latin-1.

Если у вас много разных вариантов Mojibake (неверное декодирование текста, приводящее к тарабарщине), ftfy могут помочь:

>>> import ftfy
>>> ftfy.fix_text('If further information is needed, don´t hesitate to contact us. Kind regards, José Ramirez.')
'If further information is needed, don´t hesitate to contact us. Kind regards, José Ramirez.'
person L3viathan    schedule 01.08.2019