Como baixar link com unicode usando wget?


14

Às vezes, um link possui caracteres unicode, como http://www.example.com/файл.zip

Se você apontar o navegador para ele, ele solicitará que você baixe o arquivo como файл.zip. Mas se você tentar fazer isso wget, o arquivo será fornecido com uma mistura de?, Porcentagem de codificação (como% D0% BB) e a (invalid encoding)sequência após o nome do arquivo.

Quais parâmetros posso adicionar ao wget, ou qualquer outro truque da linha de comando, para que ele se comporte como Chrome e Firefox e salve o arquivo exatamente como especificado no link renderizado - neste caso, como файл.zip?

A solução deve funcionar sem precisar explicitamente gravá-la no comando, portanto, um explícito wget -O файл.zip http://www.example.com/файл.zipnão é uma boa solução.

Percebo que, assim que você executa, wget http://www.example.com/файл.zipele tenta recuperar http://www.example.com/%D1%84%D0%B0%D0%B9%D0%BB.zip , ou seja, converte o link em porcentagem codificação, que pode ser a razão pela qual salva, não processa o nome do arquivo "corretamente".

Postei aqui uma pergunta um pouco relacionada , cuja resposta pode ou não ser útil para essa.

Respostas:


3

Você pode usar curl, como a seguir

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

Ele será salvo em файл.zip.


23

Para o wget, você pode usar:

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

se o seu sistema puder manipular UTF-8 ou outra codificação corretamente.

Por fim, se você ainda tiver esses% símbolos no arquivo baixado, poderá usar o módulo Python urllib.unquote(filename)que substituirá% xx escapes pelo equivalente a um caractere único.


3
Isso deve ser marcado como resposta aceita. Se a combinação disso e tudo o mais que as pessoas fazem com o wget (por exemplo, fazer o download recursivamente) puder ser feita no curl OP e provavelmente todos os outros já teriam feito isso.
Behrooz

Pode ser útil também --restrict-file-names=nocontrol se o link do arquivo não for final.
Ipeacocks

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.