Làm thế nào để tải liên kết với unicode bằng wget?


14

Đôi khi, một liên kết có các ký tự unicode trong đó, chẳng hạn như http://www.example.com/файл.zip

Nếu bạn trỏ trình duyệt của mình tới trình duyệt đó, nó sẽ nhắc bạn tải xuống đúng tệp dưới dạng файл.zip. Nhưng nếu bạn cố gắng thực hiện với nó wget, tệp đi kèm với một hỗn hợp gồm ?, Mã hóa phần trăm (như% D0% BB) và (invalid encoding)chuỗi sau tên tệp.

Tôi có thể thêm tham số nào vào wget hoặc bất kỳ thủ thuật dòng lệnh nào khác để nó hoạt động như Chrome và Firefox và lưu tệp chính xác như được chỉ định trong liên kết được kết xuất - trong trường hợp này, như là файл.zip?

Giải pháp nên hoạt động mà không cần phải viết rõ ràng trong lệnh, vì vậy một wget -O файл.zip http://www.example.com/файл.zipgiải pháp rõ ràng không phải là một giải pháp tốt.

Tôi nhận ra rằng ngay khi bạn chạy, wget http://www.example.com/файл.zipnó cố gắng truy xuất http://www.example.com/%D1%84%D0%B0%D0%B9%D0%BB.zip , nghĩa là, nó chuyển đổi liên kết thành phần trăm mã hóa, có thể là lý do tại sao nó lưu nó không hiển thị tên tệp "đúng".

Tôi đã đăng một câu hỏi hơi liên quan ở đây , câu trả lời có thể có hoặc không có ích cho câu hỏi này.

Câu trả lời:


3

Bạn có thể sử dụng curl thay thế, như sau

curl -O http://www.example.com/файл.zip

Nó sẽ lưu nó vào файл.zip.


23

Đối với wget, bạn có thể sử dụng:

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

nếu hệ thống của bạn có thể xử lý UTF-8 hoặc mã hóa khác đúng cách.

Cuối cùng, nếu bạn vẫn còn các ký hiệu% đó trong tệp đã tải xuống của mình, bạn có thể sử dụng mô-đun Python urllib.unquote(filename)sẽ thay thế% xx thoát bằng tương đương ký tự đơn.


3
Điều này nên được đánh dấu là câu trả lời được chấp nhận, Nếu sự kết hợp giữa điều này và mọi thứ khác mà mọi người làm với wget (ví dụ: tải xuống đệ quy) có thể được thực hiện trong OP curl và có lẽ mọi người khác đã làm điều đó rồi.
Behrooz

Cũng có thể hữu ích --restrict-file-names=nocontrol nếu liên kết tập tin không phải là cuối cùng.
ipeacocks 17/2/2016

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.