Estamos recebendo um arquivo .rar contendo muitos arquivos com caracteres especiais é&€ .... Precisamos extraí-lo em um servidor remoto usando o shell.
Se eu usar unrar x archive/name where/to/extract/
, a extração vai bem. O problema é que todo arquivo com um caractere especial fica truncado e perde sua extensão:
vidéo.jpeg => vid
lolèo.pdf => lol
Eu realmente preciso manter o nome completo e a extensão. Eu tentei usar o comando rar que tornou as coisas ainda piores. Alguma ideia de como resolver este problema?
A única maneira que encontramos é extrair o arquivo usando um sistema operacional Windows e depois enviar os arquivos para o servidor remoto...
Certifique-se de que o
unrar
processo esteja sendo executado em uma localidade baseada em Unicode.Embora os arquivos RAR sempre contenham nomes de arquivos armazenados em Unicode, não há codificação obrigatória de nomes de arquivos para Linux em geral – os programas precisam examinar a localidade atual do sistema em $LANG e transformar o nome de acordo.
Se nenhum código de idioma foi definido, o padrão será considerado ASCII e a recodificação feita por
unrar
falhará assim que encontrar um caractere que não possa ser representado no código de idioma do sistema. Por outro lado, se a localidade disser UTF-8, ela poderá representar qualquer caractere Unicode.Primeiro verifique
locale -a
as localidades atualmente disponíveis. Em algumas distribuições mais recentes (por exemplo, Debian Bullseye), a localidadeC.UTF-8
está sempre disponível e você pode ir diretamente para o passo 3.(A saída "locale -a" mostrará sufixos ".utf8"; isso é normal e também funcionará, mas ainda é melhor usar ".UTF-8" em configurações reais.)
Se a lista contiver uma localidade compatível com UTF-8, escolha-a (o idioma real não importa). Se não houver nenhum, corra
locale-gen en_US.UTF-8
para adicionar um. (Este processo é diferente entre várias distribuições, por exemplo, no Arch você precisaria editar "/etc/locale.gen".)Execute
localectl set-locale LANG="xx_XX.UTF-8"
para selecionar a localidade; isto irá gravar em /etc/locale.conf ou /etc/default/locale ou algum arquivo similar.Se você estiver usando 'unrar' via SSH - faça logout, faça login novamente (para atualizar o ambiente) e execute
locale
para garantir que a configuração de LANG tenha efeito elocale charmap
para ter certeza de que sua localidade é baseada em UTF-8.Se você tiver um serviço que executa 'unrar' – reinicie todo o servidor ou execute
sudo systemctl set-environment LANG="xx_XX.UTF-8"
e reinicie esse serviço.