2

pdftotextオプション「-enc utf-8 -htmlmeta -raw」を使用して、それを出力を解析するpythonスクリプトに渡します。(pdftotext に慣れていない場合でも、関係ない可能性があるため、読み進めてください。)

私たちが処理している一部の pdf では、pdftotext は次のようなメタデータを出力しています。

<meta name="CreationDate" content="<FE><FF>">

Pythonでは、これを(基本的に)行っています:

attrib[name] = content.decode('utf-8')

上記のメタデータの文字列はどこにcontentありますか。<FE><FF>Python は例外を発生させます。

UnicodeDecodeError: 'utf8' codec can't decode byte 0xfe in position 0: unexpected code byte

この時点で、問題が PDF 自体にあるのか、pdftotext からの出力なのか、Python の utf-8 の解釈方法にあるのかはわかりません。

私はグーグルで検索しましたが、決定的なものは何も見つかりませんでした。

基本的に、有効な utf-8のみを出力することを期待pdftotext -enc utf-8します。そして、デコード時にそのutf-8を処理する方法をPythonが理解することを期待しています。私が見逃している部分はありますか?

なぜこれが起こっているのかを理解し、解決策を教えていただければ幸いです。

ありがとう!

4

1 に答える 1

2

2つのこと:

まず、 を使用する代わりに、次を使用content.decode('utf-8')します。

content.decode('utf-8-sig')

これにより、BOM が自動的に削除されます (存在する場合)。

次に、pdftotextUTF-8 ではなく UTF-16 BOM を出力しているようです。UTF-8 BOM は「\xEF\xBB\xBF」です。なぜ UTF-16 になっているのかを突き止めるか、UTF-16 からデコードするようにスクリプトを変更する必要があります。

于 2012-11-29T03:31:57.143 に答える