Иногда ссылка содержит символы Юникода, например 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 [ 115], то есть он преобразует ссылку в процентную кодировку, что может быть причиной того, что он сохраняет не правильно отображаемое имя файла.
Я разместил здесь несколько связанный вопрос , ответ на который может помочь, а может и не помочь.
Я не смог найти способ решить эту проблему с помощью wget
, но смог успешно передать файлы с помощью Midnight Commander .
Вместо этого вы можете использовать curl, как описано в
curl -O http://www.example.com/файл.zip
. Это сохранит его в файл.zip.
Для wget вы можете использовать:
wget http://www.example.com/файл.zip --restrict-file-names=nocontrol
, если ваша система может правильно обрабатывать UTF-8 или другую кодировку.
Наконец, если в загруженном файле все еще остаются эти символы%, вы можете использовать модуль Python urllib.unquote(filename)
, который заменит экранирование% xx их односимвольным эквивалентом.
Мой ответ аналогичен тому, что отправил Баладжи Пурушотхам.
Мне пришлось добавить .parse
, чтобы это заработало в python:
import wget
wget.download(urllib.parse.unquote(url), destination_file)