Correzione della codifica delle umlaut tedesche in directory e nomi di file (ü = u╠ê e così via)


13

Ho molti file zip in cui ci sono errori di codifica per le umlaut tedesche (äüöÄÜÖß). Vengono visualizzati sia nel nomefile.zip che nelle directory e nei file inclusi in questo modo:

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

e così via. Di solito uso Linux, ma a causa di questi problemi ho anche provato una macchina virtuale Windows 7, ma risulta lo stesso errore di codifica. Su Linux ho giocato con convmv e detox, ma senza successo.

Quando uso

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

Ottengo "Salto, già UTF-8".

Qualche idea a riguardo?


Quale sistema antico stai usando? Tutte le attuali distribuzioni Linux utilizzano UTF-8 ora.
BatchyX,

Potrebbe essere un problema con il filesystem? Forse non è montato in UTF?
terdon,

Uso Linux Mint 13 (basato su Ubuntu 12.04 LTS con Kernel 3.2.0-23), quindi questo è tutt'altro che antico. E come ho già scritto ho provato anche quei file su una macchina virtuale Windows 7. Ma ovviamente non so cosa usasse quello che ha creato i file zip.
sidro

1
Questa codifica sembra una sorta di codifica DOS. Di solito, se vedo problemi con la codifica UTF8, le umlaut tedesche sembrano ä = ä o Ü = Ãœ
sidro

@cider try find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest Trova i file dall'attuale dir forward ed esegue convmv separatamente su ogni file. Il nome file viene trovato come elenco nullterminated.
Manwe,

Risposte:


2

Il motivo per cui stai ricevendo l'avviso "già UTF-8" è che quelle stringhe sono già veramente in UTF-8. Il carattere "ü" è stato codificato in stile OSX come "u" seguito dai due byte "\ xCC" e "\ x88". Questi due byte insieme costituiscono la rappresentazione UTF-8 di \ u0308, la diaeresi combinata.

Se guardi l'elenco dei codici 437 qui , vedrai il carattere \ xCC come "╠" e il carattere \ x88 come "ê".

Qualunque cosa tu stia usando per visualizzare quelle sequenze di caratteri, non è interpretarle come UTF-8 ma piuttosto come CP437.

Una prova rapida, se leggi ruby, che viene visualizzato come previsto nel mio terminale UTF-8:

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

0

La mia ipotesi è il filesystem che stai tentando di decomprimere o manipolare i file. A FAT32 non piaceranno le tue umlaut. Prova a copiare questi file dall'unità flash (o cosa hai) e quindi decomprimi il file zip per vedere che tipo di caratteri producono i nomi dei file.

Sia NTFS (Windows) che Ext4 (Menta) non dovrebbero avere problemi con la codifica dei nomi.

È molto probabile che la codifica dei nomi dei file zip stessi sul sistema FAT32 non cambi o non venga modificata quando li si copia in un file system che supporta correttamente, ma le sottodirectory quando decompresse dovrebbero andare bene.


0

Prima nota che la codifica dei caratteri è la sua sezione dell'inferno. Nel mondo di Windows esiste ancora un brutto dualismo tra UTF-8 e M $ che giocano stupidamente per lungo tempo e insistono su ISO-8859 (indovinate chi ne è venuto fuori). Come accennato in precedenza, ha quasi sicuramente a che fare con il file system. La mia soluzione non è tecnica, ma ha funzionato per me ormai da molti anni:

Il mio consiglio personale per i nomi dei file è sempre lo stesso: basta attenersi ai caratteri alfanumerici più trattino (-) e trattino basso (_). Scrivi umlaute come ae, ue e oe. Non usare spazi e altri caratteri speciali. All'inizio è un po 'scomodo, ma ti farà risparmiare molto dolore in luoghi inaspettati.

Come nota a margine: sì, è una specie di brutto "hack", ma se lavori su più piattaforme devi spesso ricorrere all'ultimo comune denominatore. Darei per scontato che qualcosa di base come la codifica dei caratteri sarebbe uno standard difficile, ma risulta che gli standard sono una cosa difficile da ottenere. Questo XKCD lo riassume abbastanza bene


Sono stanco di problemi di codifica nei nomi dei file quando provo (e non riesco) a sincronizzare i file tra Mac, Windows e Linux (tramite Syncthing). Vorrei adattare il tuo consiglio, tuttavia in turco ci sono ç, ş, ı, ğ, ü, ö, non conveniente per scrivere con alfanumerici. Voglio astenermi dall'utilizzare l'archiviazione cloud, ma questo problema mi costringe a farlo.
Teo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.