【发布时间】:2011-04-12 07:17:54
【问题描述】:
我有一个程序,它从 curl 请求中搜索特定字符串的回复。我有时会得到压缩数据。有没有办法找到回复是文本还是压缩格式? 标头有时包含 gziipped,deflate 标头,但不一致。有没有办法搜索字符串并找到它是否被压缩?
【问题讨论】:
我有一个程序,它从 curl 请求中搜索特定字符串的回复。我有时会得到压缩数据。有没有办法找到回复是文本还是压缩格式? 标头有时包含 gziipped,deflate 标头,但不一致。有没有办法搜索字符串并找到它是否被压缩?
【问题讨论】:
您可以尝试查看数据的前两个字节。对于压缩后的数据,they should be 0x1f, 0x8b。
Member header and trailer
ID1 (IDentification 1)
ID2 (IDentification 2)
These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 (0x8b, \213),
to identify the file as being in gzip format.
【讨论】:
您可以查看文件的第一个字节。也许它们包含magic number。
【讨论】:
gzip 文件格式以一些“魔术字节”开头。您可以检查正文是否以这些开头,如果是,则将字节推回流中并开始解压缩。
【讨论】:
你可以通过 zcat 管道它,如果它失败了,就按原样使用字符串。我知道马虎,但它应该是可靠的;纯文本文件永远不会包含有效的压缩数据。
【讨论】:
符合标准的 HTTP 响应将包含 Content-Encoding: 或 Transfer-Encoding: 标头,为压缩响应指定“gzip”,无需通过查看幻数进行猜测。不幸的是,很多网站都把这些标题弄错了。
【讨论】: