2017-01-25 6 views
0

私の友人は、Cのfprintf関数を使用して簡単な詩を書いています。生成されたファイルがバイナリになるように 'wb'オプションを使って書かれました。私はPythonを使用して、詩をプレーンテキストで表示したいと考えています。Pythonを使用してバイナリファイルをプレーンテキストとして読む

私が使用していますコード:

with open("read-me-if-you-can.bin", "rb") as f: 
     print f.read() 

f.close() 
+0

元の質問は少し不明でした。私はそれを明確にしようとしましたが、誤って意味を変えてしまった場合は、それを元に戻すことができます。 – Tagc

+0

'bytearray'として読み込んで文字列に変換するだけです。 –

+0

私に例を教えてください。 –

答えて

1

をテキストを扱うときの事は、私は現在、このような文字列がたくさんあるそうだ何

ファイルに書き込まれた場合、そのファイルを書き込むときに使用された文字エンコーディングを知る(または正しく推測する)必要があります。ファイルを読み込んでいるプログラムが間違ったエンコーディングを想定している場合、あなたが運が良ければテキストには不思議な文字で終わり、不運な場合は完全なゴミで終わります。

推測しようとしないでください。友人にどのような文字エンコーディングを尋ねる必要がありますか。その文字エンコーディングを指定してファイルをPythonで開く必要があります。のは、彼/彼女の答えは(例のために)「UTF-16-LE」で、あなたはそれから書くとしましょう:

with open("poetry.bin", encoding="utf-16-le") as f: 
    print(f.read()) 

あなたがそうそこにあなたが書いた、しかしまだPythonの2にしているようだ:

import io 
with io.open("poetry.bin", encoding="utf-16-le") as f: 
    print f.read() 

最初にUTF-8を試してみることもできます。これはよく使われるエンコーディングです。

+0

私はUTF-8とASCIIの両方を使用しましたが、うまくいきませんでした...どのように使用されたエンコーディングを得ることができますか?私の友人に尋ねる? UNIXコマンドを使用していますか? –

+0

''ファイルpoetry.bin''をあなたのシェルに入れてみてください。あなたの知りたいことが分からなければ、あなたの友人に相談してください。または、適切なテキストエディタでファイルを開きます。ファイルのエンコーディングをどこかに伝える必要があります。 –

+0

read-me-if-you-can.bin:ISO-8859テキスト(行末がなく、非常に長い行)。しかし、ISO-8859をエンコーディング変数に入れると、LookupError:未知のエンコーディング:ISO-8859 –

関連する問題