Python: специальные символы, дающие мне проблемы (из PDFminer)

Я использовал pdf2text из PDFminer, чтобы уменьшить PDF-текст. К сожалению, он содержит специальные символы. Позвольте мне показать вывод с моей консоли

>>>a=pdf_to_text("ap.pdf") 

heres образец его, немного усеченный

 >>>a[5000:5500] 'f one architect. Decades ...... but to re\xef\xac\x82ect\none set of design ideas, than to have one that contains many\ngood but independent and uncoordinated ideas.\n1 Joshua Bloch, \xe2\x80\x9cHow to Design a Good API and Why It Matters\xe2\x80\x9d, G......=-3733' 

Я понял, что я должен кодировать его

 >>>a[5000:5500].encode('utf-8') Traceback (most recent call last): File "<interactive input>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 237: ordinal not in range(128) 

Я немного искал и пробовал их, в частности заменил специальные символы на python . Вход поступает от PDFminer, поэтому его жесткий (AFAIK), чтобы контролировать это. Каким образом можно сделать правильный текст из этого вывода?

Что я делаю не так?

– Быстрое исправление: измените кодек PDFminer на ascii-, но это не долговременное решение –

–Абоксированное быстрое исправление для ответа – изменение кодека удаляет информацию –

– Революционная тема, упомянутая Максимом http://en.wikipedia.org/wiki/Windows-1251 –

  • Запуск сценариев Python внутри Android Studio
  • Как разделить список Python на два списка, в соответствии с некоторыми аспектами элементов
  • Как удалить пакет python, который был установлен с помощью distutils?
  • os.environ не работает
  • Есть ли умный способ передать ключ default_factory defaultdict?
  • Определить тип объекта?
  • Python - поиск проблем unicode / ascii
  • Очистите веб-страницу, которая требует, чтобы они сначала открывали сессионный файл cookie
  • One Solution collect form web for “Python: специальные символы, дающие мне проблемы (из PDFminer)”

    Эта проблема часто возникает, когда текст не-ASCII хранится в объектах str . То, что вы пытаетесь сделать, – это кодировать в utf-8 строку, уже закодированную в некоторой кодировке (потому что она содержит символы с кодами выше 0x7f ).

    Чтобы закодировать такую ​​строку в utf-8 она должна быть сначала расшифрована. Предполагая, что исходное кодирование текста – cp1251 (замените его фактической кодировкой), что-то вроде следующего будет делать трюк:

     u = s.decode('cp1251') # decode from cp1251 byte (str) string to unicode string s = u.encode('utf-8') # re-encode unicode string to utf-8 byte (str) string 

    В основном, приведенный выше фрагмент делает команду iconv --from-code=CP1251 --to-code=UTF-8 , то есть преобразует строку из одной кодировки в другую.

    Некоторые полезные ссылки:

    • Python Unicode HOWTO
    • Разработка приложений с поддержкой Unicode в Python
    Python - лучший язык программирования в мире.