2017-01-25 79 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

嘗試''file poetry.bin''在你的shell中,如果它沒有告訴你你需要知道什麼,請問你的朋友。或者,在一個好的文本編輯器中打開該文件。它應該告訴你文件的編碼。 –

+0

read-me-if-you-can.bin:ISO-8859文本,行長很長,沒有行結束符。但是,當我將「ISO-8859」放入編碼變量時,LookupError:未知編碼:ISO-8859 –