V této příručce popíšeme kódování znaků a pokryjeme několik příkladů převodu souborů z jednoho kódování znaků na jiné pomocí nástroje příkazového řádku. Nakonec se podíváme na to, jak převést několik souborů z libovolné znakové sady (charset ) na UTF-8 kódování v Linuxu.
Jak už možná máte na mysli, počítač nerozumí a neukládá písmena, čísla ani nic jiného, co my jako lidé dokážeme vnímat kromě bitů. Bit má pouze dvě možné hodnoty, a to buď 0
nebo 1
, true
nebo false
, yes
nebo no
. Všechny ostatní věci, jako jsou písmena, čísla, obrázky, musí být reprezentovány v bitech, aby je počítač zpracoval.
Jednoduše řečeno, kódování znaků je způsob, jak informovat počítač, jak interpretovat hrubé nuly a jedničky na skutečné znaky, kde znak je reprezentován množinou čísel. Když zadáváme text do souboru, slova a věty, které tvoříme, se skládají z různých znaků a znaky jsou uspořádány do znakové sady .
Existují různá schémata kódování, jako je ASCII , ANSI , Unicode mezi ostatními. Níže je uveden příklad ASCII kódování.
Character bits A 01000001 B 01000010
V systému Linux je ikona nástroj příkazového řádku se používá k převodu textu z jedné formy kódování do jiné.
Kódování souboru můžete zkontrolovat pomocí souboru pomocí -i
nebo --mime
příznak, který umožňuje tisk řetězce typu mime jako v příkladech níže:
$ file -i Car.java $ file -i CarDriver.java
Syntaxe pro použití iconv je následující:
$ iconv option $ iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile
Kde -f
nebo --from-code
znamená kódování vstupu a -t
nebo --to-encoding
určuje kódování výstupu.
Chcete-li zobrazit seznam všech známých kódovaných znakových sad, spusťte níže uvedený příkaz:
$ iconv -l
Převod souborů z kódování UTF-8 na kódování ASCII
Dále se naučíme, jak převést z jednoho schématu kódování na jiné. Níže uvedený příkaz převádí z ISO-8859-1 na UTF-8 kódování.
Zvažte soubor s názvem input.file
který obsahuje znaky:
� � � �
Začněme kontrolou kódování znaků v souboru a poté si prohlédněte obsah souboru. Úzce můžeme převést všechny znaky do ASCII kódování.
Po spuštění ikony zkontrolujeme obsah výstupního souboru a nové kódování znaků, jak je uvedeno níže.
$ 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
Poznámka :V případě řetězce //IGNORE
se přidá do kódování, znaky, které nelze převést, a po převodu se zobrazí chyba.
Opět předpokládejme řetězec //TRANSLIT
se přidá do kódování jako ve výše uvedeném příkladu (ASCII//TRANSLIT ), převáděné znaky se přepisují podle potřeby a pokud je to možné. Což znamená, že v případě, že znak nemůže být zastoupen v cílové znakové sadě, lze jej aproximovat pomocí jednoho nebo více podobně vypadajících znaků.
V důsledku toho je každý znak, který nelze přepsat a není v cílové znakové sadě, nahrazen otazníkem (?)
ve výstupu.
Převést více souborů do kódování UTF-8
Vraťme se k našemu hlavnímu tématu, chcete-li převést více nebo všechny soubory v adresáři do kódování UTF-8, můžete napsat malý skript shell s názvem encoding.sh takto:
#!/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
Uložte soubor a poté vytvořte spustitelný skript. Spusťte jej z adresáře, kde jsou vaše soubory (*.txt
) se nacházejí.
$ chmod +x encoding.sh $ ./encoding.sh
Důležité :Tento skript můžete také použít pro obecný převod více souborů z jednoho daného kódování do jiného, jednoduše si pohrajte s hodnotami FROM_ENCODING
a TO_ENCODING
proměnnou, nezapomeňte na název výstupního souboru "${file%.txt}.utf8.converted"
.
Další informace naleznete pod ikonou manuálová stránka.
$ man iconv
Abychom shrnuli tuto příručku, pochopení kódování a převodu z jednoho schématu kódování znaků na jiné je nezbytnou znalostí pro každého uživatele počítače a tím spíše pro programátory, pokud jde o práci s textem.
A konečně, můžete nás kontaktovat pomocí sekce komentářů níže pro jakékoli dotazy nebo zpětnou vazbu.