Wget返回二进制而不是HTML?


12

我正在使用wget下载静态html页面。W3C验证程序告诉我该页面以UTF-8编码。然而,当我下载完文件后,我得到了一堆二进制废话。我在Ubuntu上,我认为默认编码为UTF-8?这就是我的语言环境文件所说的。为什么会发生这种情况,我该如何纠正?

另外,看起来像Content-Encoding: gzip。也许这有所不同?

这是简单的请求:

wget https://www.example.com/page.html

我也尝试过这个:

wget https://www.example.com/page.html -q -O - | iconv -f utf-16 -t utf-8 > output.html

哪个返回: iconv: illegal input sequence at position 40

处理文件将返回类似于以下内容的二进制文件:

l�?חu�`�q"�:)s��dġ__��~i��6n)T�$H�#���QJ

结果xxd output.html | head -20

00000000: 1f8b 0800 0000 0000 0003 bd56 518f db44  ...........VQ..D
00000010: 107e a6bf 62d4 8a1e 48b9 d8be 4268 9303  .~..b...H...Bh..
00000020: 8956 082a 155e 7a02 21dd cbd8 3bb6 97ae  .V.*.^z.!...;...
00000030: 77cd ee38 39f7 a1bf 9d19 3bb9 0bbd 9c40  w..89.....;....@
00000040: 2088 12c5 de9d 9df9 be99 6f67 f751 9699   .........og.Q..
00000050: 500d 1d79 5eee a265 faec 7151 e4ab 6205  P..y^..e..qQ..b.
00000060: 4dd3 0014 1790 e7d0 77c0 ef2f cbf8 cde3  M.......w../....
00000070: cf1f 7d6c 7d69 ec16 d0d9 c67f 7d7d 56c9  ..}l}i......}}V.
00000080: 04c5 eb33 35fc e49e 2563 e908 ca10 0d45  ...35...%c.....E
00000090: 31ce afcf a022 e77a 34c6 fa46 46be d88f  1....".z4..FF...
000000a0: a41e ab79 446d 76d6 702b cf45 9e7f ba77  ...yDmv.p+.E...w
000000b0: 7dc2 779c 274e cc18 483c 3a12 0f75 f07c  }.w.'N..H<:..u.|
000000c0: 5e63 67dd b886 ab48 e550 b5c4 f0e3 db0d  ^cg....H.P......
000000d0: 54c1 85b8 8627 2ff3 2ff3 17f9 0626 d31d  T....'/./....&..
000000e0: d9a6 e5b5 4076 663f 94ec 7b5a 17cf 7ade  ....@vf?..{Z..z.
000000f0: 00d3 0d9f 4fcc d733 ef8d a0bb 0a06 c7eb  ....O..3........
00000100: b304 6fb1 b1cc 18ed 90e0 8710 43aa 424f  ..o.........C.BO
00000110: 50c7 d0c1 2bac 09be 4d1c 2566 335e 666c  P...+...M.%f3^fl
00000120: 1e20 951d 58fd 6774 f3e9 f317 749f 7fc4  . ..X.gt....t...
00000130: d651 cdca f5a7 b0a5 aea4 08ab 055c e4c5  .Q...........\..

另外,奇怪的是,输出文件似乎可以在TextWrangler中正确打开!


1
修改问题以提供正在使用的命令,然后生成的输出将对此处产生巨大的帮助。
史蒂夫

LANG =的en_US.UTF-8的iconv:在位置40输入非法序列
ΓΓIICK

1
您能告诉我们“二进制废话”是什么样吗?我建议在运行: xxd dubious.file| 头-20`,并将其作为更新内容。
Bruce Ediger

@BruceEdiger已更新。
ΓΓIICK

另外,奇怪的是,输出文件似乎在TextWrangler中正确打开了!
ΓΓIICK

Answers:


28

这是一个gzip压缩文件。您可以通过运行file命令找出答案,该命令从数据中的幻数中找出文件格式(这是诸如Text Wrangler之类的程序找出文件也被压缩的方式):

file output.html
wget -O - … | file -

服务器(我从您显示的内容中猜到了)正在发送压缩数据并正确设置标头

Content-Encoding: gzip

但是wget不支持。在最新版本中,wget发送Accept-encoding: identity,以告知服务器不要压缩或编码数据。在旧版本中,您可以手动发送标题:

wget --header 'Accept-encoding: identity' …

但是,这台特定的服务器似乎已损坏:即使告诉其不要以任何方式对数据进行编码,它也会发送压缩数据。因此,您必须手动解压缩数据。

wget -O output.html.gz … && gunzip output.html.gz

很好的分析
roaima

顺便说一句,如果您不想存储临时文件,则可以使用与之gunzip相同的方式进行传递file。你可能想通过-c--to-stdout(或者称其为zcat)将其插入到管道中的问题,之间wgeticonv
Toby Speight

15

该文件仍使用压缩gzip

您可以看到前两个字节0x1f8b与gzip签名匹配。因此,要读取数据,您需要将其解压缩。

mv file.dat file.dat.gz
gunzip file.dat.gz

要么

zcat file.dat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.