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
, sì
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.