【问题标题】:read() stops after NUL characterread() 在 NUL 字符后停止
【发布时间】:2011-11-26 18:33:39
【问题描述】:

我正在通过 HTTPS 下载文件,我通过 urllib2.Request 请求文件,它们以 socket._fileobject 的形式返回。理想情况下,我希望将其流式传输到文件以避免将其加载到内存中,但我不确定如何执行此操作。

我的问题是,如果我在对象上调用 .read(),它只会返回直到第一个 NUL 字符的所有数据,并且不会读取整个文件。我该如何解决这个问题?

如果有帮助,NUL 字符会显示为 \x00,但不确定是什么编码

【问题讨论】:

  • 也许您应该验证协议中是否允许 \X00 之后的数据。您是否尝试过其他一些库,例如 python 中的 curl pycurl.sourceforge.net.
  • .read() 方法通常不关心 NUL 字节。您能否向我们展示您的代码和一些触发问题的示例输入?
  • 这并不容易,因为该文件来自需要身份验证的服务器。奇怪的是,.readlines() 将整个文件作为一个由\n 字符分隔的列表,正如预期的那样,但read() 只返回MZ,因为文件开始MZ ÿÿ,其中空格是NUL 字节。为什么 read 不能在 readlines 工作的地方工作?我应该在readlines 上使用"".join 来获取文件内容吗?
  • 调用.read() 不会读取整个数据。您必须继续调用它才能获取所有数据。请分享一些代码。
  • 我应该分享什么代码有什么建议吗?我不能发出返回文件对象的调用,因为它由于身份验证而无法工作。我以为.read() 确实读取了整个数据,如果我再次调用它多次它什么也没有返回。 (有趣的是,"".join(f.readlines()) 只返回 MZ,就像 .read() 一样。)

标签: python nul


【解决方案1】:

我发现问题在于我在 PyScripter 中运行代码,而内置的 python 解释器会终止输出中的 NUL 字节。所以我的代码没有问题,如果我在 PyScripter 之外运行它,一切正常。现在运行 Wing IDE,永不回头 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2021-10-23
    • 2013-10-20
    相关资源
    最近更新 更多