2011-07-29 17 views
11

私はPDFminerのpdf2textを使ってPDFをテキストに変換しました。残念ながら、それは特殊文字を含んでいます。私は私のコンソールPython:私に問題を与える特殊文字(PDFminerから)

>>>a=pdf_to_text("ap.pdf") 
相続人

それのサンプル、少し切り詰め

>>>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) 

私は少し周りを探索し符号化しなければならないことを理解してからの出力をお見せしましょう彼らを試しました、特にReplace special characters in python。入力はPDFminerから来ているので、そのタフ(AFAIK)を制御します。適切にする方法は何ですか平文この出力からですか?

私は間違っていますか?

-A-クイックフィックス:ascii-するPDFminerのコーデックを変更するが、それはコーデックを変更answer-ための持続的なsolution--

--Abandonedクイックフィックスはありませんが削除された情報 -

マキシムhttp://en.wikipedia.org/wiki/Windows-1251で述べたように-A-のrelaventトピック -

+0

ありがとう!私は初心者Pythonであなたは多分このエラーがappaerいないようにPdfminerを使用する方法デモコードを投稿することができますか?ありがとう –

答えて

10

非ASCIIテキストがstrオブジェクトに格納されている場合、この問題が頻繁に発生します。あなたがしようとしているのは、0x7f以上のコードを含む文字が含まれているため、ある種のエンコーディングで既にエンコードされた文字列をutf-8でエンコードすることです。

このような文字列を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コマンドが何を行いますあるエンコーディングを別のエンコーディングに

いくつかの便利なリンク:この質問のための

+0

はい、これは完璧に近いです!私は "...вÐ,äšDeliveringCusto .."のようなアーティファクトをいくつか持っていましたが、最大の喜びのためにアマチュアによって作られたPDFでした。クリーナーPDFはきれいに解析されます。 – aitchnyu

+0

いいです、あなたはあなたの入力エンコーディングを知る必要があります。 –

+0

私は間違いなく 'a.decode( 'cp1250')。encode( 'utf-8')'と書いています。 –

関連する問題