2011-08-01 6 views
2

私たちは、txtファイルに埋め込まれたuuencodeされたPDFファイルの一部をデコードしようとしています。特定のUUencodeされたファイルがPythonを使って正しくデコードされないのはなぜですか?

問題は、ほとんどのPDFファイルがPythonのuuencodeライブラリを使ってうまくデコードされていることです。

try: 
    decoded_file,m=uudecode(fileString) 
except: 
    decoded_file='' 

ただし、一部のファイルはデコード後に開くことができません。 「この文書を開く際にエラーが発生しました。ファイルが破損して修復できませんでした」というメッセージが表示されます。

私たちがGoogleで見つけられる唯一のものは、私たちのファイルがbase64でエンコードされている可能性があり、Pythonのuuencodingモジュールがbase32のみをサポートしているということです。 base64またはbase32を使用してuuencodeされているかどうかを判断できる方法はありますか?ここで

は、我々が正常に復号化uuencodeされたPDFファイルを持っていたtxtファイルの例です: http://www.sec.gov/Archives/edgar/data/914257/000000000011005978/0000000000-11-005978.txt

を私たちはこれらをデコードしている間: http://www.sec.gov/Archives/edgar/data/1108046/000000000011020832/0000000000-11-020832.txt

そしてここでは、失敗した1例ですPythonでは何のエラーも表示されず、すべてが正常に動作しているようです。何が原因でデコードが正しく行われないのでしょうか?私たちがそれらを処理している間、これをフラグする方法はありますか?

+0

'except:'は* bad *です。あなたは、Pythonが生成する診断に目立たないようにしています。 – pyroscope

答えて

1
>>> uu.decode(open('0000000000-11-005978.txt')) 
Warning: Trailing garbage 

ソースデータ自体が壊れています。これは、末尾に近い行の先頭の..によってさらに証明されます。

+0

ありがとう!これは問題であることが分かった。 – Colby

+0

私はちょうど警告でも、出力PDFを適切に開くことができますを追加したいです。 (最初に.txtファイルからuuencoded部分を抽出しました)さらに、 '..'を' M'に置き換えると警告が消えます。 – Falcon

+0

@Ignacioどのように '..'からそれが壊れていると言うことができますか? [UUEncoding](http://en.wikipedia.org/wiki/Uuencoding)ウィキペディアの記事から、 '.'は行の有効な開始点であり、' .'は行内で有効であるようです。 –

0
$ python -c "import urllib2; print len(urllib2.urlopen('http://www.sec.gov/Archives/edgar/data/914257/000000000011005978/0000000000-11-005978.txt').read().decode('uu'))" 
43124 

は問題ありません。

+0

興味深いですが、私はPythonにはかなり新しいので、あなたのアプローチをどのように翻訳するのかはわかりません。私はこれを試して、私はあなたと同じ長さを取得しますが、私は前に持っていたのと同じエラーを取得するファイルを書き込もうとするとき。 PDFはAdobe Readerで開くとまだ失敗します。 – Colby

+1

ああ、私は、デコード中に例外がスローされなかったので、結果のPDFの有効性をチェックしませんでした。私はオリジナルが壊れていると仮定することができます。 – pyroscope

+0

助けてくれてありがとう! – Colby

関連する問題