Comment télécharger un lien avec unicode en utilisant wget?

14

Parfois, un lien contient des caractères Unicode, tels que http://www.example.com/файл.zip

Si vous pointez votre navigateur vers celui-ci, il vous invitera correctement à télécharger le fichier sous le nom файл.zip. Mais si vous essayez de le faire avec wget, le fichier est livré avec un mélange de?, Pourcentage d'encodage (comme% D0% BB) et la (invalid encoding)chaîne après le nom de fichier.

Quels paramètres puis-je ajouter à wget, ou à toute autre astuce de ligne de commande, pour qu'il se comporte comme Chrome et Firefox et enregistre le fichier exactement comme spécifié dans le lien rendu - dans ce cas, comme файл.zip?

La solution devrait fonctionner sans avoir à l'écrire explicitement dans la commande, donc une explicite wget -O файл.zip http://www.example.com/файл.zip n'est pas une bonne solution.

Je me rends compte que dès que vous l'exécutez, wget http://www.example.com/файл.zipil essaie de récupérer http://www.example.com/%D1%84%D0%B0%D0%B9%D0%BB.zip , c'est-à-dire qu'il convertit le lien en pourcentage l'encodage, qui peut être la raison pour laquelle il enregistre, ne rend pas le nom de fichier "correctement".

J'ai posté une question quelque peu connexe ici , dont la réponse peut ou non être utile à celle-ci.

Strapakowsky
la source

Réponses:

3

Vous pouvez utiliser curl à la place, comme suit

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

Il l'enregistrera dans файл.zip.

John Siu
la source
23

Pour wget, vous pouvez utiliser:

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

si votre système peut gérer UTF-8 ou un autre encodage correctement.

Enfin, si vous avez encore ces symboles% dans votre fichier téléchargé, vous pouvez utiliser le module Python urllib.unquote(filename)qui remplacera les échappements% xx par leur équivalent à un seul caractère.

Balaji Purushotham
la source
3
Cela devrait être marqué comme réponse acceptée, si la combinaison de cela et de tout ce que les gens font avec wget (par exemple, le téléchargement récursif) pouvait être effectuée dans curl OP et probablement tout le monde l'aurait déjà fait.
Behrooz
Peut également être utile --restrict-file-names=nocontrol si le lien du fichier n'est pas définitif.
ipeacocks
0

Je n'ai pas trouvé de moyen de résoudre ce problème wgetmais j'ai réussi à transférer les fichiers avec Midnight Commander .

Daniel Böhmer
la source