【问题标题】:Reading a binary file as plain text using Python使用 Python 将二进制文件作为纯文本读取
【发布时间】:2017-06-11 02:28:43
【问题描述】:

我的一个朋友使用 C 的 fprintf 函数写了简单的诗歌。它是使用 'wb' 选项编写的,因此生成的文件是二进制文件。我想使用 Python 以纯文本形式显示诗歌。

我目前得到的是很多这样的字符串:��������

我正在使用的代码:

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

f.close()

【问题讨论】:

  • 您最初的问题有点不清楚。我试图澄清它,但如果我无意中改变了意思,你可以回滚。
  • 只需读入bytearray,然后将其转换为字符串。
  • 你能举个例子吗?
  • 您在阅读时是否使用了“rb”选项?
  • 是的,我正在使用这个选项。我已经更新了添加代码的问题。

标签: python io binary


【解决方案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,这是一种常用的编码方式。

【讨论】:

  • 我同时使用了 UTF-8 和 ASCII 并且它没有工作......我怎样才能获得使用的编码?问我朋友?使用 UNIX 命令?
  • 在你的shell中尝试file poetry.bin,如果它没有告诉你你需要知道什么,问你的朋友。或者,在一个好的文本编辑器中打开文件。它应该在某处告诉你文件的编码。
  • read-me-if-you-can.bin:ISO-8859 文本,行很长,没有行终止符。但是,当我将“ISO-8859”放入编码变量时,LookupError: unknown encoding: ISO-8859
  • ISO-8859 是一个编码系列。请改用ISO-8859-1。见en.wikipedia.org/wiki/Character_encoding 但是,这个文件应该在任何文本编辑器中都可以轻松读取,甚至在不使用编码的情况下也可以在 Python 中读取。在我看来,您得到的文件是错误的或损坏的,或者您的朋友根本没有正确写入。
  • UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-131071: ordinal not in range(128)
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多