【问题标题】:Mysterious bytes in GZIP (bytestream) compression Python3GZIP(字节流)压缩Python3中的神秘字节
【发布时间】:2014-01-06 20:04:52
【问题描述】:

我有一个包含大量内容的文件(符号重 <>?!""''=:;),我希望部分压缩,我读取文件,转换为字节流,然后压缩。我希望压缩会模糊地像: \x1f\x8b\x08\x00\x00\x92\x04 等等。

但是,结果更像: \x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa 等等。当然我应该得到 00 到 ff 范围内的十六进制值?

Python3代码的主要sn-p:

with open('somefile', 'r') as f:
  for lines in f.readlines():
    messages = (str(lines)).encode('ascii') #Or 'UTF-8' both produce funny results
    compMessages = gzip.compress(messages) #Default level of 6 is fine here
    return compMessages

我能找到的唯一有趣/相关的信息是 len(str(lines)) 是与 len(lines.encode('ascii')) 不同的值

请给点意见?

【问题讨论】:

  • 嗯?你在期待什么?压缩流应该使用所有可能的字节值,所以我不知道你所说的“神秘”字节是什么意思。
  • 我期待“纯十六进制”。也就是说\x00 和\xff 之间的值。不是 \xfaXg} 之类的值

标签: python-3.x compression gzip zlib


【解决方案1】:

您的输出没有任何“神秘”之处。你只是没有正确阅读它。这个:

\x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa

相同
\x1f\x8b\x08\x00\x00\xa6\x30\x76\x3f\x04\x7b\x3f\x58\x0e\x44\x61

只是ASCII可打印字符(十六进制值在0x200x7E之间的字符),例如0v?{Da,显示为它们的 ascii 值,而不是 \x 转义码。

要验证这一点,请注意以下几点:

>>> [ord(i) for i in '\x1f\x8b\x08\x00\x00\xa60v?\x04{?X\x0eDa']
[31, 139, 8, 0, 0, 166, 48, 118, 63, 4, 123, 63, 88, 14, 68, 97]

所有值都在0255 之间。

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多