정적 HTML 페이지를 다운로드하기 위해 wget을 사용하고 있습니다. W3C Validator는 페이지가 UTF-8로 인코딩되었음을 알려줍니다. 그러나 다운로드 후 파일을 고양이로 만들면 바이너리 넌센스가 많이 발생합니다. 우분투를 사용 중이며 기본 인코딩이 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
파일을 cating하면 다음과 같은 바이너리가 반환됩니다.
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에서 출력 파일이 올바르게 열리는 것 같습니다!
답변
이것은 gzip 압축 파일입니다. 데이터의 매직 숫자 에서 file
파일 형식을 알아내는 명령 을 실행하여이를 찾을 수 있습니다 (이것은 Text Wrangler와 같은 프로그램이 파일이 압축되었음을 알아내는 방법입니다).
file output.html
wget -O - … | file -
서버 (보인 내용에서 짐작했습니다)는 gzipped 데이터를 보내고 헤더를 올바르게 설정하고 있습니다.
Content-Encoding: gzip
그러나 wget은 그것을 지원하지 않습니다. 최신 버전에서 wget send Accept-encoding: identity
는 서버가 데이터를 압축하거나 인코딩하지 않도록 지시합니다. 이전 버전에서는 헤더를 수동으로 보낼 수 있습니다.
wget --header 'Accept-encoding: identity' …
그러나이 특정 서버는 손상된 것으로 보입니다. 어떤 식 으로든 데이터를 인코딩하지 말라고하더라도 압축 된 데이터를 보냅니다. 따라서 데이터를 수동으로 압축 해제해야합니다.
wget -O output.html.gz … && gunzip output.html.gz
답변
이 파일은 여전히으로 압축되어 gzip
있습니다.
처음 두 바이트 0x1f8b가 gzip
서명 과 일치 함을 알 수 있습니다 . 따라서 데이터를 읽으려면 압축을 풀어야합니다.
mv file.dat file.dat.gz
gunzip file.dat.gz
또는
zcat file.dat