Jun 212011
 

iconv L’articolo di oggi è di Juan Valencia, originariamente pubblicato sul suo blog (disponibile anche in spagnolo), io l’ho trovato davvero interessante con articoli approfonditi riguardanti i comandi rsync, ssh e molti altri.

Quando si ricevono e si ha la necessità di gestire più file di testo che utilizzano caratteri che non sono naturali per la lingua inglese, si può incorrere nel problema che ha a che fare con le differenti codifiche dei caratteri. Ciò è particolarmente evidente nei siti web, in cui se il browser cerca di interpretare i file di testo con una codifica diversa dalla codifica effettiva, che il file sta usando, vedremo strani simboli nei punti in cui avrebbero dovuto esserci mostrati questi caratteri, ma non è limitato a siti web, qualsiasi programma che è fatto per funzionare con lingue diverse dall’inglese può presentare un problema simile se non viene gestito nella maniera giusta.




Nel caso degli archivi HTML, molte persone, e diversi programmi come default, optano per cambiare questi caratteri stranieri o con entità HTML (ad esempio á per avere un á) o una codifica ISO Latin-1 (ad esempio á per avere una á), ma la verità è che al giorno d’oggi ogni moderno (e non così moderno) browser è in grado di gestire con successo codifiche come iso-8859-1 o utf-8, tutto quello che dobbiamo fare è scegliere una codifica e l’uso che stessa codifica per tutti i file per evitare conflitti e specificare al browser che stiamo utilizzando tale codifica. Personalmente preferisco usare utf-8 in quanto lo considero un set di caratteri molto più flessibile e completo, e a meno che non sia richiesto ho standardizzato l’uso di utf-8 in tutti i miei progetti e nei miei sistemi in generale.

Per rilevare la codifica che viene utilizzata all’interno di un file, possiamo usare il comando ” file“. Questo comando cerca di rilevare automaticamente la codifica che un file sta usando. Se non vengono rilevati caratteri speciali all’interno del file di testo, “ file ” ci dirà che la codifica è US-ASCII, e il nostro editor può utilizzare qualsiasi codifica di caratteri sia impostata per essere utilizzata di default. Ovviamente, ho impostato il mio editor per lavorare con utf-8 per default.

file --mime-encoding file.txt

Una volta che abbiamo la codifica del file, lo possiamo trasformare in una codifica con caratteri diversi se ​​è necessario, utilizzando:

iconv --from-code=iso-8859-1 --to-code=utf-8 file.txt > file.txt.utf8
mv file.txt.utf8 file.txt

Cambiare la codifica dei caratteri di più file

Quando abbiamo bisogno di cambiare la codifica dei caratteri di un file, il più delle volte dobbiamo cambiare la codifica dei caratteri anche di altri file, per fare questa operazione su più file contemporaneamente possiamo utilizzare:

for old in *.txt;
do
iconv --from-code=iso-8859-1 --to-code=utf-8 $old > $old.utf8;
done

Una volta fatto questo, siamo in grado di rinominare tutti i file convertiti con il nome con cui essi sono stati generati, sostituendo l’originale con la versione ricodificata:

for old in *.utf8;
do
cp $old `basename $old .utf8`;
done

basename ci da il nome del file eccetto la parte “.utf8”. Se tutto è ok, siamo in grado di rimuovere i file temporanei che abbiamo creato.

rm *.utf8

Qua finisce l’articolo di Juan

Altri esempi con iconv:

find . -name "*.php" -exec iconv -f ISO-8859-1 -t UTF-8 {} -o ../newdir_utf8/{} \;

Converte tutti i file.php da ISO-8859-1a utf-8 http://blog.ofirpicazo.com/linux/batch-convert-files-to-utf-8/

mysqldump --add-drop-table -uroot -p "DB_name"  | replace CHARSET=latin1 CHARSET=utf8 | iconv -f latin1 -t utf8 | mysql -uroot -p "DB_name"

Converte un database mysql da latin1 a utf8

Popular Posts:

Flattr this!

  2 Responses to “Rilevamento e modifica della codifica dei file di testo.”

  1. Excelent post!

  2. Thank you!

Leave a Reply to fraterneo Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*