Как скачать ссылку с юникодом с помощью wget?


14

Иногда ссылка содержит символы Юникода, например 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 , то есть он преобразует ссылку в процент кодирование, которое может быть причиной того, что оно сохраняет, не отображает имя файла "правильно".

Я разместил здесь несколько связанный вопрос , ответ на который может помочь, а может и не помочь.

Ответы:


3

Вы можете использовать вместо этого curl, как следует

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

Это сохранит его в файл.zip.


23

Для wget вы можете использовать:

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

если ваша система может правильно обрабатывать UTF-8 или другую кодировку.

Наконец, если в загруженном файле все еще остаются эти символы%, вы можете использовать модуль Python urllib.unquote(filename), который заменит экранирование% xx их односимвольным эквивалентом.


3
Это должно быть помечено как принятый ответ, если сочетание этого и всего остального, что люди делают с wget (например, рекурсивная загрузка), может быть выполнено в curl OP, и, вероятно, все остальные уже сделали бы это.
Behrooz

Может быть полезно также, --restrict-file-names=nocontrol если ссылка на файл не является окончательной.
ipeacocks

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.