[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux_var] Verificare codifica file e cambiarla



Condivido una cosa che è servita a me, spiegandola in modo che sia comprensibile anche a chi ha meno dimestichezza con certi meccanismi di Linux.

Nei miei sistemi non avevo impostato l'utf-8. Ho deciso di farlo, però inevitabilmente poi mi sono trovato con alcuni file che avevano un'altra codifica, vedendoli con i classici caratteri strani. Linux offre delle soluzioni molto semplici e già perfettamente integrate per questo problema.

Per verificare la codifica di un file abbiamo il classico comando "file", con l'opzione "--mime-encoding".
Un esempio su di un file di testo che chiameremo "prova-codifiche.txt".
Il testo contenuto sarà "Prova codifica caratteri è ò à ù ì". I caratteri accentati verranno visualizzati in modo errato nel caso che il nostro sistema sia impostato su "utf-8" e se il file sarà codificato ad esempio in "iso-8859-1".
Infatti se diamo un:

$ cat prova-codifiche.txt

(attenzione: il carattere "$" è il prompt dei comandi!)

otterremo:

Prova codifica caratteri � � � �

(spero che nella vostra lettura si vedano i punti interrogativi al posto dei 5 caratteri accentati)

Se daremo un:

$ file --mime-encoding prova-codifiche.txt

il risultato sarà:

prova-codifiche.txt: iso-8859-1

Ora, se vogliamo modificarne la codifica dovremo farlo con un piccolo giro. Useremo un altro tool nativo di linux: "iconv". Come prima cosa dovremo ottenere un altro file dove verrà copiato il contenuto di questo ma con la codifica che vogliamo noi (ATTENZIONE: non fatelo sullo stesso file! Ma nemmeno usando il nome di un file esistente altrimenti con la redirezione ">" lo sovrascriverete distruggendone il contenuto!). In questo caso la nuova codifica sarà "utf-8":

$ iconv -f iso-8859-1 -t utf-8 prova-codifiche.txt > prova-codifiche-utf-8.txt

(il file in cui verrà copiato il contenuto l'ho chiamato "prova-codifiche-utf-8.txt", ma potete chiamarlo come volete, basta che non sia il nome del file originale e, RIPETO, nemmeno di un file esistente altrimenti ne distruggerete il contenuto!)

Dopo potremo decidere di sovrascrivere il file originale con quello codificato nella nuova codifica:

$ mv prova-codifiche-utf-8.txt prova-codifiche.txt

Se ora daremo di nuovo un:

$ file --mime-encoding prova-codifiche.txt

otterremo:

prova-codifiche.txt: utf-8

e se daremo un cat:

$ cat prova-codifica.txt

il risultato sarà:

Prova codifica caratteri è ò à ù ì

I caratteri accentati saranno visualizzati correttamente nel nostro sistema impostato su utf-8.

Un'ultima cosa, tutto questo volendo si potrebbe includere in uno script che, combinando il comando "find", potrebbe convertire tutti i file presenti in una o più directory, o in tutto il computer, da altre codifiche a "utf-8", o a quello che ci interessa.

Spero questa miniguida sia utile a qualcuno.

Saluti! :)
Gigi

PS: che dite, la metto sul sito?

_______________________________________________
Talking mailing list
Talking@ml.linuxvar.it
http://ml.linuxvar.it/cgi-bin/mailman/listinfo/talking