Corrigir codificação de tremas alemães em diretórios e nomes de arquivos (ü = u╠ê e assim por diante)


13

Eu tenho muitos arquivos zip nos quais há erros de codificação para os tremas alemães (äüöÄÜÖß). Eles aparecem no nome do arquivo.zip e nos diretórios e arquivos incluídos como este:

  • Fünf = Fu╠ênf
  • Räuber = Ra╠êuber
  • Überfall = U╠êberfall

e assim por diante. Normalmente eu uso Linux, mas por causa desses problemas eu também tentei uma VM Windows7, mas isso resulta na mesma bagunça de codificação. No Linux, eu brinquei com convmv e desintoxicação, mas sem sucesso.

Quando eu uso

  • convmv -f iso-8859-1 -t utf8 --replace --notest -r *

Eu recebo "Ignorando, já UTF-8".

Alguma idéia sobre isso?


Que sistema antigo você está usando? Todas as distribuições atuais do Linux usam UTF-8 agora.
BatchyX

Isso pode ser um problema no sistema de arquivos? Talvez não esteja montado em UTF?
terdon

Eu uso o Linux Mint 13 (baseado no Ubuntu 12.04 LTS com Kernel 3.2.0-23), então isso está longe de ser antigo. E como eu já escrevi, também tentei esses arquivos em uma VM do Windows 7. Mas é claro que não sei o que foi quem criou os arquivos zip.
cidra

1
Essa codificação parece algum tipo de codificação DOS. Normalmente, se eu vejo problemas com UTF8 codificação dos trema alemão olhar como um = å¤ ou U = AOE
cidra

@cider try find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest Isso localiza os arquivos do dir atual e executa o convmv separadamente em cada arquivo. O nome do arquivo é exibido como lista terminada em nulo.
Manwe

Respostas:


2

O motivo pelo qual você está recebendo o aviso "já UTF-8" é que essas cadeias já estão realmente no UTF-8. O caractere "ü" foi codificado no estilo OSX como um 'u' seguido pelos dois bytes "\ xCC" e "\ x88". Esses dois bytes juntos formam a representação UTF-8 de \ u0308, a diérese combinada.

Se você olhar a página de código 437 listada aqui , verá o caractere \ xCC como "╠" e o caractere \ x88 como "ê".

O que quer que você esteja usando para exibir essas seqüências de caracteres não as interpreta como UTF-8, mas como CP437.

Uma prova rápida, se você ler ruby, exibida conforme o esperado no meu terminal UTF-8:

$ ruby -e 'puts "u\xCC\x88"' | iconv -f cp437 -t utf-8
ü
$ ruby -e 'puts "u\xCC\x88"'
ü

0

Meu palpite é o sistema de arquivos que você está tentando descomprimir ou manipular os arquivos. O FAT32 não vai gostar dos seus tremas. Tente copiar esses arquivos off da unidade flash (ou o que você quiser) e , em seguida, descompactar o arquivo zip para ver que tipo de personagens os nomes de arquivos produzir.

NTFS (Windows) e Ext4 (Mint) não devem ter problemas com a codificação de nome.

A codificação de nome dos próprios arquivos zip no sistema FAT32 provavelmente não será alterada ou corrigida quando você copiá-los para um sistema de arquivos de suporte adequado, mas os subdiretórios quando descompactados devem estar bem.


0

Primeiro, observe que a codificação de caracteres é sua própria seção do inferno. No mundo Windows, ainda existe um dualismo desagradável entre UTF-8 e M $, sendo estúpido por um longo tempo e insistindo na ISO-8859 (adivinhe quem veio com isso). Como mencionado acima, quase certamente tem algo a ver com o sistema de arquivos. Minha solução não é técnica, mas que já funcionou para mim há muitos anos:

Meu conselho pessoal para nomes de arquivos é sempre o mesmo: fique com alfanuméricos mais traço (-) e sublinhado (_). Escreva trema como ae, ue e oe. Não use espaços e outros caracteres especiais. No começo, é um pouco inconveniente, mas poupa muita dor em lugares inesperados.

Como uma observação lateral: sim, isso é uma espécie de "hack" desagradável, mas se você trabalha em várias plataformas, muitas vezes precisa voltar ao último denominador comum. Você deveria considerar que algo básico como a codificação de caracteres seria um padrão rígido, mas os padrões são difíceis de obter. Este XKCD resume bastante bem


Estou cansado de problemas de codificação em nomes de arquivos quando tento (e falho) sincronizar arquivos entre Mac, Windows e Linux (via Syncthing). Eu adaptaria o seu conselho, no entanto, em turco, não é conveniente escrever com alfanuméricos, ç, ş, ı, ğ, ü, ö. Quero me abster de usar armazenamento em nuvem, mas esse problema me obriga a fazê-lo.
Teo
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.