วิธีการดาวน์โหลดลิงค์ด้วย unicode โดยใช้ wget


14

บางครั้งลิงก์มีอักขระ Unicode อยู่ในนั้นเช่นhttp://www.example.com/файл.zip

หากคุณชี้เบราว์เซอร์ไปที่เบราว์เซอร์จะแจ้งให้คุณดาวน์โหลดไฟล์เป็นфайл.zip แต่ถ้าคุณลองทำด้วยwgetไฟล์จะมาพร้อมกับการเข้ารหัสเปอร์เซ็นต์การเข้ารหัส (เช่น% D0% BB) และ(invalid encoding)สตริงหลังชื่อไฟล์

ฉันสามารถเพิ่มพารามิเตอร์ใดใน wget หรือเทคนิคบรรทัดคำสั่งอื่น ๆ เพื่อให้ทำงานเป็น Chrome และ Firefox และบันทึกไฟล์ตามที่ระบุในลิงก์ที่แสดงผล - ในกรณีนี้เป็นфайл.zip

โซลูชันควรทำงานได้โดยไม่ต้องเขียนไว้อย่างชัดเจนในคำสั่งดังนั้นwget -O файл.zip http://www.example.com/файл.zipวิธีแก้ปัญหาที่ชัดเจนจึงไม่ใช่วิธีที่ดี

ฉันรู้ว่าทันทีที่คุณเรียกใช้wget http://www.example.com/файл.zipจะพยายามดึงhttp://www.example.com/%D1%84%D0%B0%D0%B9%D0%BB.zipนั่นคือมันจะแปลงลิงก์เป็นเปอร์เซ็นต์ การเข้ารหัสซึ่งอาจเป็นสาเหตุว่าทำไมการบันทึกจึงไม่ทำให้ชื่อไฟล์ "ถูกต้อง"

ฉันโพสต์คำถามที่เกี่ยวข้องบ้างที่นี่ซึ่งคำตอบอาจมีหรือไม่มีประโยชน์กับคำถามนี้

คำตอบ:



23

สำหรับ wget คุณสามารถใช้:

wget http://www.example.com/файл.zip --restrict-file-names=nocontrol

หากระบบของคุณสามารถจัดการ UTF-8 หรือการเข้ารหัสอื่น ๆ ได้อย่างถูกต้อง

สุดท้ายหากคุณยังมีสัญลักษณ์% เหลืออยู่ในไฟล์ที่ดาวน์โหลดคุณสามารถใช้โมดูล Python urllib.unquote(filename)ที่จะแทนที่% xx escapes ด้วยอักขระตัวเดียว


3
ควรทำเครื่องหมายเป็นคำตอบที่ยอมรับถ้าการรวมกันของสิ่งนี้กับทุกสิ่งที่ผู้คนทำกับ wget (เช่นการดาวน์โหลดซ้ำ) สามารถทำได้ใน curl OP และบางทีคนอื่น ๆ ก็ทำได้แล้ว
Behrooz

มีประโยชน์เช่นกัน--restrict-file-names=nocontrol หากลิงก์ไฟล์ไม่สิ้นสุด
ipeacocks

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.