Ошибка при изменении кодировки строки с помощью Python.UTF-8 и cp1252 - PullRequest
0 голосов
/ 01 октября 2018

Мне нужно преобразовать строку, чтобы преобразовать ее в читаемый человеком формат.

s = "that’s awful, Find – Best Quotes, “Music gives a soul to the universe, wings to the mind, flight to the imagination and life to everything.” ― Plato."

Я хочу преобразовать эту строку в "that’s awful, Find - Best Quotes, "Music gives a soul to the universe, wings to the mind, flight to the imagination and life to everything." ― Plato."

Но я сталкиваюсь с несколькимивыдает различные сценарии.

  1. , когда я использую print(str(s.encode('cp1252',"ignore"),'utf-8')) Я получаю

    UnicodeDecodeError: кодек «utf-8» не может декодировать байт 0x92 в позиции4

  2. когда я использую print(str(s.encode('cp1252'),'utf-8',"ignore")) Я получаю

    UnicodeEncodeError: кодек 'charmap' не может кодировать символ '\ u2015' в позиции151

  3. когда я использую print(str(s.encode('cp1252',"ignore"),'utf-8',"ignore")) Тогда, как можно предсказать, я получаю строку без ошибок после пропуска всех апострофов, одинарных и двойных кавычек как

    "это ужасно, найди - лучшие цитаты, музыка дает душу вселенной, крылья разуму, полет к воображению и жизнь всему. Платон."

1 Ответ

0 голосов
/ 01 октября 2018

Я попробовал все, но я не мог исправить это самостоятельно.Более простой способ выполнить тот же поиск, что и вы, - это s.encode ('utf-8', "ignore"). Decode ("utf-8", ignore).Я попытался в комбинациях latin1, ascii, cp1252 и utf8, utf16 и сдался.Я попробовал кодировки по одному из этого списка кодировок Python.Затем я искал код, который мог бы обнаружить то же самое умнее.

Затем я пришел к сообщению в блоге , которое объясняет все, что может пойти не так при исправлении кодировки.Решение, которое они предложили, состояло в том, чтобы запустить полный поиск всех кодировок, чтобы найти правильное.

Этот пакет называется ftfy.

Отказ от ответственности: я не связан с ftfy.Я только что видел это сегодня.

pip install ftfy

s = "that’s awful, Find – Best Quotes, “Music gives a soul to the universe, wings to the mind, flight to the imagination and life to everything.” ― Plato."

import ftfy

print(ftfy.fix_text(s))

это ужасно, Find - Best Quotes, "Музыка дает душу вселенной,крылья для ума, полет к воображению и жизнь ко всему. "- Платон.

Это решает проблему.Для получения дополнительной информации о том, как они это исправили, см. Исходный код ftfy здесь или docs здесь .:)

...