我的一位朋友用C的fprintf
函數編寫了簡單的詩歌。它是使用'wb'選項編寫的,因此生成的文件是二進制文件。我想用Python以純文本顯示詩歌。使用Python讀取純文本的二進制文件
什麼目前我得到很多的字符串是這樣的:
我使用的代碼:
with open("read-me-if-you-can.bin", "rb") as f:
print f.read()
f.close()
我的一位朋友用C的fprintf
函數編寫了簡單的詩歌。它是使用'wb'選項編寫的,因此生成的文件是二進制文件。我想用Python以純文本顯示詩歌。使用Python讀取純文本的二進制文件
什麼目前我得到很多的字符串是這樣的:
我使用的代碼:
with open("read-me-if-you-can.bin", "rb") as f:
print f.read()
f.close()
的事情是,當用文字處理寫入文件時,必須知道(或正確猜測)寫入所述文件時使用的字符編碼。如果閱讀文件的程序在這裏假設錯誤的編碼,那麼如果你幸運的話,文本中會出現奇怪的字符,如果你不幸運的話,將會完全垃圾。
不要試圖猜測,試着去知道:你需要問問你的朋友他用什麼字符編碼將他的詩歌文本寫入文件。然後您必須用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,但這是一種常用的編碼方式。
我同時使用了UTF-8和ASCII,它沒有工作......我如何得到使用的編碼?問我的朋友?使用UNIX命令? –
嘗試''file poetry.bin''在你的shell中,如果它沒有告訴你你需要知道什麼,請問你的朋友。或者,在一個好的文本編輯器中打開該文件。它應該告訴你文件的編碼。 –
read-me-if-you-can.bin:ISO-8859文本,行長很長,沒有行結束符。但是,當我將「ISO-8859」放入編碼變量時,LookupError:未知編碼:ISO-8859 –
你的原始問題有點不清楚。我試圖澄清它,但如果我無意中改變了意思,你可以將它回滾。 – Tagc
只讀爲'bytearray',然後將其轉換爲字符串。 –
你能舉個例子嗎? –