Jak převést soubory do kódování UTF-8 v Linuxu
V této příručce popíšeme, jaké 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) do kódování UTF-8 v Linuxu.
Jak už možná máte na mysli, počítač nerozumí ani 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
, ano
nebo ne
. 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 do skutečných znaků, kde znak je reprezentován sadou čísel. Když zadáváme text do souboru, slova a věty, které tvoříme, jsou sestaveny z různých znaků a znaky jsou uspořádány do znakové sady.
Existují různá schémata kódování, například ASCII, ANSI, Unicode a další. Níže je uveden příklad kódování ASCII.
Character bits
A 01000001
B 01000010
V Linuxu se k převodu textu z jedné formy kódování na jinou používá nástroj příkazového řádku iconv.
Kódování souboru můžete zkontrolovat pomocí příkazu file pomocí příznaku -i
nebo --mime
, který umožňuje tisk typu mime řetězec 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 výstupní kódování.
Chcete-li zobrazit seznam všech známých kódovaných znakových sad, spusťte následující příkaz:
iconv -l
Převeďte soubory 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řevede z kódování ISO-8859-1 na kódování UTF-8.
Zvažte soubor s názvem vstup.soubor
, který obsahuje znaky:
� � � �
Začněme kontrolou kódování znaků v souboru a poté si prohlédněte obsah souboru. V těsné blízkosti můžeme převést všechny znaky do kódování ASCII.
Po spuštění příkazu iconv pak 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ě, že je do kódování přidán řetězec //IGNORE
, zobrazí se znaky, které nelze převést, a zobrazí se chyba po konverzi.
Opět, předpokládejme, že řetězec //TRANSLIT
je přidán 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 jakýkoli znak, který nelze přepsat a není v cílové znakové sadě, ve výstupu nahrazen otazníkem (?)
.
Převeďte 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 shellu nazvaný 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 umístěny vaše soubory (*.txt
).
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ěnná, nezapomeňte na název výstupního souboru "$ {file%.txt}.utf8.converted"
.
Další informace naleznete na manuálové stránce iconv.
man iconv
Abychom shrnuli tuto příručku, porozumění 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 pro programátory, pokud jde o práci s textem.
Nakonec nás můžete kontaktovat pomocí sekce komentářů níže pro jakékoli dotazy nebo zpětnou vazbu.