Wie lade ich einen Link mit Unicode mit wget herunter?

14

Manchmal enthält ein Link Unicode-Zeichen, z. B. http://www.example.com/файл.zip

Wenn Sie mit Ihrem Browser darauf zeigen, werden Sie ordnungsgemäß aufgefordert, die Datei als файл.zip herunterzuladen. Wenn Sie jedoch versuchen, dies zu tun wget, enthält die Datei eine Mischung aus?, Prozentcodierung (wie% D0% BB) und der (invalid encoding)Zeichenfolge nach dem Dateinamen.

Welche Parameter kann ich zu wget oder anderen Befehlszeilentricks hinzufügen, damit es sich wie Chrome und Firefox verhält und die Datei genau so speichert, wie im gerenderten Link angegeben - in diesem Fall als файл.zip?

Die Lösung sollte funktionieren, ohne sie explizit in den Befehl schreiben zu müssen, daher ist eine explizite wget -O файл.zip http://www.example.com/файл.zipLösung keine gute Lösung.

Sobald Sie es ausführen wget http://www.example.com/файл.zip, wird versucht, http://www.example.com/%D1%84%D0%B0%D0%B9%D0%BB.zip abzurufen , dh der Link wird in Prozent konvertiert Kodierung, was der Grund sein kann, warum es speichert, rendert den Dateinamen nicht "richtig".

Ich habe hier eine etwas verwandte Frage gestellt , deren Antwort möglicherweise nicht hilfreich ist.

Strapakowsky
quelle

Antworten:

3

Sie können stattdessen wie folgt Curl verwenden

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

Es wird es in файл.zip speichern.

John Siu
quelle
23

Für wget können Sie verwenden:

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

ob Ihr System mit UTF-8 oder einer anderen Codierung ordnungsgemäß umgehen kann.

Wenn Ihre heruntergeladene Datei noch% -Symbole enthält, können Sie das Python-Modul verwenden urllib.unquote(filename), das% xx-Escapezeichen durch das Einzelzeichen-Äquivalent ersetzt.

Balaji Purushotham
quelle
3
Dies sollte als akzeptierte Antwort markiert werden. Wenn die Kombination von diesem und allem anderen, was Leute mit wget machen (z. B. rekursives Herunterladen), in curl OP erfolgen könnte und wahrscheinlich jeder andere dies bereits getan hätte.
Behrooz,
Kann auch nützlich sein, --restrict-file-names=nocontrol wenn der Dateilink nicht endgültig ist.
Ipeacocks