HTML 대신 바이너리를 반환합니까?


12

정적 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에서 출력 파일이 올바르게 열리는 것 같습니다!


1
사용중인 명령과 생성되는 출력을 제공하기 위해 질문을 수정하는 것이 여기에 큰 도움이 될 것입니다.
— steve

LANG = en_US.UTF-8 iconv : 위치 40에서 잘못된 입력 시퀀스
— ΓΓIICK

1
"이진 넌센스"가 어떤 모습인지 보여줄 수 있습니까? 나는 달리기를 제안한다 : xxd dubious.file| 헤드 -20` 및 업데이트로 포함합니다.
— Bruce Ediger

@BruceEdiger가 업데이트되었습니다.
— ΓΓIICK

또한 이상하게도 출력 파일이 TextWrangler에서 올바르게 열리는 것 같습니다!
— ΓΓIICK

답변:


28

이것은 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

매우 훌륭한 분석
— roaima

BTW, 임시 저장하지 않으려는 경우 gunzip와 동일한 방식으로 파이프를 연결할 수 있습니다 file. 및의 사이에있는 파이프 라인에 삽입하기 위해 전달 -c하거나 --to-stdout호출 할 수 있습니다 . zcatwgeticonv
— Toby Speight

15

이 파일은 여전히으로 압축되어 gzip있습니다.

처음 두 바이트 0x1f8b가 gzip서명 과 일치 함을 알 수 있습니다 . 따라서 데이터를 읽으려면 압축을 풀어야합니다.

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

또는

zcat file.dat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.