Zoeken op website

Bestanden converteren naar UTF-8-codering in Linux


In deze handleiding beschrijven we welke tekencodering er is en bespreken we enkele voorbeelden van het converteren van bestanden van de ene tekencodering naar de andere met behulp van een opdrachtregelprogramma. Ten slotte zullen we kijken hoe we verschillende bestanden van elke tekenset (charset) naar UTF-8-codering in Linux kunnen converteren.

Zoals u waarschijnlijk al in gedachten heeft, begrijpt of bewaart een computer geen letters, cijfers of iets anders dat wij als mensen kunnen waarnemen, behalve bits. Een bit heeft slechts twee mogelijke waarden, namelijk 0 of 1, true of false, ja of nee. Al het andere, zoals letters, cijfers en afbeeldingen, moet in bits worden weergegeven zodat een computer het kan verwerken.

Simpel gezegd is tekencodering een manier om een computer te informeren hoe ruwe nullen en enen moeten worden geïnterpreteerd in daadwerkelijke tekens, waarbij een teken wordt weergegeven door een reeks cijfers. Wanneer we tekst in een bestand typen, worden de woorden en zinnen die we vormen samengesteld uit verschillende karakters, en worden de karakters georganiseerd in een tekenset.

Er zijn verschillende coderingsschema's beschikbaar, zoals onder andere ASCII, ANSI en Unicode. Hieronder ziet u een voorbeeld van ASCII-codering.

Character  bits
A               01000001
B               01000010

In Linux wordt het opdrachtregelprogramma iconv gebruikt om tekst van de ene vorm van codering naar de andere te converteren.

U kunt de codering van een bestand controleren met de opdracht file, door de vlag -i of --mime te gebruiken, waarmee u het mime-type kunt afdrukken tekenreeks zoals in de onderstaande voorbeelden:

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

De syntaxis voor het gebruik van iconv is als volgt:

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

Waar -f of --from-code invoercodering betekent en -t of --to-encoding specificeert uitvoercodering.

Voer de onderstaande opdracht uit om alle bekende gecodeerde tekensets weer te geven:

iconv -l 

Converteer bestanden van UTF-8 naar ASCII-codering

Vervolgens zullen we leren hoe we van het ene coderingsschema naar het andere kunnen converteren. Met de onderstaande opdracht wordt de codering ISO-8859-1 naar UTF-8 geconverteerd.

Beschouw een bestand met de naam input.file dat de tekens bevat:


� � � �

Laten we beginnen met het controleren van de codering van de tekens in het bestand en vervolgens de bestandsinhoud bekijken. In principe kunnen we alle tekens converteren naar ASCII-codering.

Nadat we de opdracht iconv hebben uitgevoerd, controleren we de inhoud van het uitvoerbestand en de nieuwe codering van de tekens, zoals hieronder.

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 

Opmerking: Als de string //IGNORE wordt toegevoegd aan de codering, kunnen tekens niet worden geconverteerd en wordt er een fout weergegeven na conversie.

Nogmaals, aangenomen dat de string //TRANSLIT wordt toegevoegd aan de codering zoals in het bovenstaande voorbeeld (ASCII//TRANSLIT), worden de tekens die worden geconverteerd naar behoefte getranslitereerd en indien mogelijk . Dit houdt in dat in het geval dat een personage niet kan worden weergegeven in de doeltekenset, het kan worden benaderd via een of meer op elkaar lijkende tekens.

Bijgevolg wordt elk teken dat niet kan worden getranslitereerd en niet in de doeltekenset zit, vervangen door een vraagteken (?) in de uitvoer.

Converteer meerdere bestanden naar UTF-8-codering

Terugkomend op ons hoofdonderwerp: om meerdere of alle bestanden in een map naar UTF-8-codering te converteren, kunt u als volgt een klein shell-script schrijven met de naam encoding.sh:

#!/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

Sla het bestand op en maak het script uitvoerbaar. Voer het uit vanuit de map waar uw bestanden (*.txt) zich bevinden.

chmod  +x  encoding.sh
./encoding.sh

Belangrijk: je kunt dit script net zo goed gebruiken voor de algemene conversie van meerdere bestanden van de ene bepaalde codering naar de andere. Speel gewoon met de waarden van FROM_ENCODING en TO_ENCODING variabele, en niet te vergeten de naam van het uitvoerbestand "$ {file%.txt}.utf8.converted".

Voor meer informatie kunt u de iconv manpagina raadplegen.

man iconv

Om deze handleiding samen te vatten: het begrijpen van codering en het converteren van het ene tekencoderingsschema naar het andere is noodzakelijke kennis voor elke computergebruiker, vooral voor programmeurs als het gaat om het omgaan met tekst.

Ten slotte kunt u contact met ons opnemen via het onderstaande commentaargedeelte voor eventuele vragen of feedback.