Jak pobrać link z Unicode za pomocą wget?

14

Czasami link zawiera znaki Unicode, takie jak http://www.example.com/файл.zip

Jeśli wskażesz na nią przeglądarkę, wyświetli się monit o pobranie pliku jako файл.zip. Ale jeśli spróbujesz to zrobić wget, plik zawiera mieszankę?, Kodowania procentowego (np.% D0% BB) i (invalid encoding)ciąg po nazwie pliku.

Jakie parametry mogę dodać do wget lub innych sztuczek wiersza poleceń, aby zachowywał się jak Chrome i Firefox i zapisuje plik dokładnie tak, jak podano w renderowanym łączu - w tym przypadku jako файл.zip?

Rozwiązanie powinno działać bez konieczności jawnego zapisywania go w poleceniu, więc polecenie jawne wget -O файл.zip http://www.example.com/файл.zipnie jest dobrym rozwiązaniem.

Zdaję sobie sprawę, że jak tylko uruchomisz wget http://www.example.com/файл.zip, próbuje pobrać http://www.example.com/%D1%84%D0%B0%D0%B9%D0%BB.zip , to znaczy, że konwertuje link na procent kodowanie, co może być powodem, dla którego zapisuje się, nie renderuje nazwy pliku „poprawnie”.

Zadałem tu nieco powiązane pytanie , na które odpowiedź może lub nie może pomóc.

Strapakowsky
źródło

Odpowiedzi:

3

Zamiast tego możesz użyć curl, jak opisano poniżej

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

Zapisze go w pliku файл.zip.

John Siu
źródło
23

W przypadku wget możesz użyć:

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

jeśli twój system poprawnie obsługuje UTF-8 lub inne kodowanie.

Wreszcie, jeśli nadal masz te% symboli w pobranym pliku, możesz użyć modułu Python urllib.unquote(filename), który zastąpi znaki ucieczki% xx ich ekwiwalentem jednego znaku.

Balaji Purushotham
źródło
3
Powinno to zostać oznaczone jako zaakceptowana odpowiedź. Jeśli połączenie tego i wszystkiego innego, co ludzie robią z wget (np. Pobieranie rekurencyjne), można wykonać w curl OP i prawdopodobnie wszyscy inni już by to zrobili.
Behrooz,
Może być przydatny również --restrict-file-names=nocontrol wtedy, gdy link do pliku nie jest ostateczny.
ipeacocks
0

Nie mogłem znaleźć sposobu na rozwiązanie tego problemu, wgetale mogłem z powodzeniem przenieść pliki za pomocą Midnight Commander .

Daniel Böhmer
źródło