กลับมาไบนารีแทน 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

cat'ing ไฟล์คืนค่าไบนารีที่มีลักษณะดังนี้:

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

คำตอบ:


28

นี่เป็นไฟล์บีบอัดgzip คุณสามารถค้นหาสิ่งนี้ได้โดยการเรียกใช้fileคำสั่งซึ่งระบุรูปแบบไฟล์จากตัวเลขเวทย์มนตร์ในข้อมูล (นี่เป็นวิธีที่โปรแกรมเช่น Text Wrangler เข้าใจว่าไฟล์นั้นถูกบีบอัดด้วย):

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

เซิร์ฟเวอร์ (ฉันเดาได้จากเนื้อหาที่คุณแสดง) กำลังส่งข้อมูล gzipped และตั้งค่าส่วนหัวอย่างถูกต้อง

Content-Encoding: gzip

แต่ wget ไม่สนับสนุนสิ่งนั้น ในรุ่นล่าสุด wget ส่งAccept-encoding: identityเพื่อบอกเซิร์ฟเวอร์ไม่ให้บีบอัดหรือเข้ารหัสข้อมูล ในรุ่นเก่ากว่าคุณสามารถส่งส่วนหัวได้ด้วยตนเอง:

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

อย่างไรก็ตามเซิร์ฟเวอร์นี้โดยเฉพาะดูเหมือนว่าจะใช้งานไม่ได้: มันส่งข้อมูลที่ถูกบีบอัดแม้ว่าจะบอกว่าจะไม่เข้ารหัสข้อมูล แต่อย่างใด ดังนั้นคุณจะต้องขยายข้อมูลด้วยตนเอง

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

การวิเคราะห์ที่ดีมาก
roaima

BTW คุณสามารถไปป์gunzipแบบเดียวกับที่คุณทำfileถ้าคุณไม่ต้องการเก็บชั่วคราว คุณอาจต้องการที่จะผ่าน-cหรือ--to-stdout(หรือเรียกว่าเป็นzcat) ไปใส่ลงในท่อในคำถามระหว่างและwget iconv
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.