2017-01-25 83 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 –