Ricerca nel sito web

Come convertire i file nella codifica UTF-8 in Linux


In questa guida descriveremo la codifica dei caratteri e tratteremo alcuni esempi di conversione di file da una codifica dei caratteri a un'altra utilizzando uno strumento da riga di comando. Infine, vedremo come convertire diversi file da qualsiasi set di caratteri (charset) alla codifica UTF-8 in Linux.

Come probabilmente avrai già in mente, un computer non capisce né memorizza lettere, numeri o qualsiasi altra cosa che noi esseri umani possiamo percepire tranne i bit. Un bit ha solo due valori possibili, ovvero 0 o 1, true o false, o no. Ogni altra cosa come lettere, numeri, immagini deve essere rappresentata in bit affinché un computer possa elaborarla.

In termini semplici, la codifica dei caratteri è un modo per informare un computer su come interpretare gli zeri e gli uno grezzi in caratteri reali, dove un carattere è rappresentato da un insieme di numeri. Quando digitiamo del testo in un file, le parole e le frasi che formiamo sono composte da caratteri diversi e i caratteri sono organizzati in un charset.

Esistono vari schemi di codifica come ASCII, ANSI, Unicode tra gli altri. Di seguito è riportato un esempio di codifica ASCII.

Character  bits
A               01000001
B               01000010

In Linux, lo strumento da riga di comando iconv viene utilizzato per convertire il testo da una forma di codifica a un'altra.

Puoi controllare la codifica di un file usando il comando file, utilizzando il flag -i o --mime che abilita la stampa del tipo mime stringa come negli esempi seguenti:

file -i Car.java
file -i CarDriver.java

La sintassi per utilizzare iconv è la seguente:

iconv option
iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile 

Dove -f o --from-code indica la codifica di input e -t o --to-encoding specifica codifica di uscita.

Per elencare tutti i set di caratteri codificati conosciuti, esegui il comando seguente:

iconv -l 

Converti file dalla codifica UTF-8 a ASCII

Successivamente, impareremo come convertire da uno schema di codifica a un altro. Il comando seguente converte dalla codifica ISO-8859-1 a UTF-8.

Considera un file denominato input.file che contiene i caratteri:


� � � �

Cominciamo controllando la codifica dei caratteri nel file e quindi visualizzando il contenuto del file. In pratica, possiamo convertire tutti i caratteri nella codifica ASCII.

Dopo aver eseguito il comando iconv, controlliamo il contenuto del file di output e la nuova codifica dei caratteri come di seguito.

file -i input.file
cat input.file 
iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
cat out.file 
file -i out.file 

Nota: nel caso in cui la stringa //IGNORE venga aggiunta alla codifica, verranno visualizzati caratteri che non possono essere convertiti e verrà visualizzato un errore dopo la conversione.

Ancora una volta, supponendo che la stringa //TRANSLIT venga aggiunta a-encoding come nell'esempio sopra (ASCII//TRANSLIT), i caratteri da convertire vengono traslitterati secondo necessità e, se possibile . Ciò implica che nel caso in cui un personaggio non possa essere rappresentato nel set di caratteri di destinazione, può essere approssimato tramite uno o più personaggi dall'aspetto simile.

Di conseguenza, qualsiasi carattere che non può essere traslitterato e non è presente nel set di caratteri di destinazione viene sostituito con un punto interrogativo (?) nell'output.

Converti più file nella codifica UTF-8

Tornando al nostro argomento principale, per convertire più o tutti i file in una directory nella codifica UTF-8, puoi scrivere un piccolo script di shell chiamato encoding.sh come segue:

#!/bin/bash
#enter input encoding here
FROM_ENCODING="value_here"
#output encoding(UTF-8)
TO_ENCODING="UTF-8"
#convert
CONVERT=" iconv  -f   $FROM_ENCODING  -t   $TO_ENCODING"
#loop to convert multiple files 
for  file  in  *.txt; do
     $CONVERT   "$file"   -o  "${file%.txt}.utf8.converted"
done
exit 0

Salvare il file, quindi rendere eseguibile lo script. Eseguilo dalla directory in cui si trovano i tuoi file (*.txt).

chmod  +x  encoding.sh
./encoding.sh

Importante: puoi anche utilizzare questo script per la conversione generale di più file da una determinata codifica a un'altra, semplicemente giocando con i valori di FROM_ENCODING e la variabile TO_ENCODING, senza dimenticare il nome del file di output "$ {file%.txt}.utf8.converted".

Per ulteriori informazioni, consulta la pagina man iconv.

man iconv

Per riassumere questa guida, comprendere la codifica e come convertire da uno schema di codifica dei caratteri a un altro è una conoscenza necessaria per ogni utente di computer, soprattutto per i programmatori quando si tratta di gestire il testo.

Infine, puoi metterti in contatto con noi utilizzando la sezione commenti qui sotto per qualsiasi domanda o feedback.