EuroConvertor ver.20190125 mění kódování znaků v textových souborech.
Program obsahuje 16bitovou verzi pro DOS i 32bitovou verzi pro Windows
v jednom souboru euroconv.exe
. Pokud mu byly předány všechny požadované parametry,
chová se jako konzolová aplikace a nevyžaduje interakci s uživatelem, takže je
dobře použitelný v dávkových souborech.
Jestliže byl spuštěn bez parametrů, například kliknutím v Průzkumníkovi MS Windows,
EuroConvertor se spustí jako okenní aplikace, kde uživatel volí soubory a jejich kódování
výběrem z nabídky. Mezi jednotlivými volbami se v tomto případě přechází
stiskem Alt současně s podtrženým znakem nabídky, nebo
klávesami Tab, Shift-Tab a volby se aktivují mezerníkem
SPACE.
EuroConvertor je tedy použitelný v dávkových skriptech pro DOS a Windows 32 i 64bitových, anebo interaktivně ve Windows a v Unixových systémech prostřednictvím wine.
EuroConvertor je k dispozici bezplatně pro soukromé i firemní využití. Byl napsán v jazyce EuroAssembler,
zdrojový kód si lze prohlédnout online
a stáhnout spolu s asemblerem i s potřebnými knihovnami z odkazu
EuroAssembler.
Spustitelná verze včetně tohoto manuálu je k dispozici ke stažení z webu
vit$oft freeware jako
euroconv.zip.
Řada dalších obdobných konvertorů zaměřených zejména na český jazyk je k dispozici na stránce porovnání převodníků češtiny od Davida Voříška.
Konsorcium Unicode přidělilo pořadové číslo (codepoint) téměř každému lidstvem používanému znaku: písmenům, číslicím, symbolům, rámečkovým a dalším grafickým znakům, smajlíkům, piktogramům, obrázkovým ideogramům. Kódováním se rozumí vztah mezi vzhledem znaku (glyph) a přiřazeným číslem.
Prvních 128 čísel Unicode převzalo z normy ASCII (American Standard Code for Information Interchange), tyto znaky jsou identické ve všech zde podporovaných kódováních.
Alternativou k ASCII je EBCDIC (Extended Binary Coded Decimal Interchange Code) zavedený firmou IBM na sálových počítačích. Kódování EBCDIC nejsou EuroConvertorem podporována.
Každý znak z tabulky ASCII používá 7 bitů, horní polovina tabulky je nepoužita. Horních 128 pozic bývá často využíváno pro písmena s diakritikou, znaky jiných abeced než latinka, nebo pro semigrafiku. Většina evropských jazyků se spokojuje s omezením na 256 možných znaků zakódovaných v jenom bajtu, tato kódování se nazývají kódové stránky OEM (Original Equipment Manufacturer) a ANSI (American National Standards Institute).
EuroConvertor rozeznává tyto 8bitové kódové stránky:
IBM437, Mazovia, IBM737, IBM775, IBM850, IBM851, IBM852, IBM853, IBM855, IBM856, IBM857, IBM858, IBM859, IBM860, IBM861, IBM862, IBM863, IBM864, IBM865, IBM866, IBM867, IBM868, IBM869, IBM874, KOI8-R, KOI8-E, KOI8-T, KOI8-F, KOI8-CS, Kamenicky, IBM912, IBM1006, KOI8-RU, KOI8-U, Windows-1250, Windows-1251, Windows-1252, Windows-1253, Windows-1254, Windows-1255, Windows-1256, Windows-1257, Windows-1258, Mac-Roman, MAC-Arabic, Mac-Hebrew, Mac-Greek, Max-Cyrillic, Mac-Romanian, Mac-Ukrainian, Mac-Thai, Mac-CE, Mac-Icelandic, Mac-Inuit, Mac-Turkish, Mac-Croatian, Mac-Gaelic, Mac-Celtic, Mac-Latin, NextStep, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-12, ISO-8859-14, ISO-8859-15, ISO-8859-16.Každý znak v kódování ASCII, OEM a ANSI zabírá přesně 1 bajt.
V kódování Unicode UTF-32
zabírá každý znak 4 bajty.
V kódování Unicode UTF-16
většina znaků zabírá 2 bajty (pokud lze jejich kódovou pozici – codepoint –
uložit jako 16bitové číslo.
Ostatní znaky (asijské abecedy, emoji apod.) se kódují pomocí dvojice 16bitových čísel
zvaných surrogates.
Nejoblíbenější způsob kódování Unicode
UTF-8 používá proměnlivou
délku kódu 1 až 4 bajty.
EuroConvertor nepodporuje kombinované znaky tvořené samostatným diakritickým znaménkem následujícím obyčejné písmeno.
EuroConvertor vyžaduje na příkazové řádce čtyři mezerou oddělené parametry v tomto pořadí:
Příklad:
euroconv.exe IBM852 UTF-8 input.txt output.txt
Pokud je uveden ještě neoficiální pátý parametr, bude EuroConvertor po vypsání závěrečné zprávy čekat na stisk klávesy, což zabraňuje zmizení konzolového okna dříve, než uživatel stačil zprávu přečíst.
Způsob pojmenování požadovaných kódování akceptovaný tímto programem
je značně benevolentní.
Nezáleží na velikosti písmen, na přítomnosti pomlček či dalších interpunkčních znamének,
mnohdy stačí uvést pouze nomenklaturní číslo kódování k jeho jednoznačnému určení.
Kromě názvů podporovaných kódování, které byly uvedeny výše, EuroConvertor akceptuje
také identifikátory kódových stránek
přiřazených firmou Microsoft,
například kódování UTF-8
má přidělenu kódovou stránku 65001
.
K volbě kódování Windows-1252
bychom mohli napsat také win-1252
,
CP1252
nebo jen 1252
.
Jiný příklad: kódování ISO-8859-10
(Latin 6) používané ve Skandinávii
bychom mohli specifikovat i jako 8859-10
, CP28600
, 28600
,
IBM919
nebo 919
.
Použitím výrazu enc
jako prvního parametru příkazové řádky vyžádáme na
EuroConvertoru, aby zobrazil seznam všech podporovaných názvů kódování:
euroconv enc
Výraz OEM
nebo ANSI
lze použít místo výslovné specifikace
kódové stránky. EuroConvertor pak použije kódování zvolené uživatelem
v Regionálním nastavení jeho systému. V případě českých Windows
se použije IBM852
(OEM Latin2) a Windows-1250
(středoevropská ANSI stránka).
Výrazem auto
požádáme EuroConvertor, aby se sám pokusil určit
kódování použité ve vstupním souboru porovnámím četnosti běžných písmen
a jejím srovnáním s počtem znaků neočekávaných v běžném textu.
Analyzuje se pouze první 1 MB textu (v dosové verzi jen prvních 48 KB).
Autodetekce funguje pouze u čistě textových souborů, může selhat, pokud je text příliš krátký nebo pokud obsahuje větší množství symbolů, semigrafiky, nelatinských písmen nebo dokonce strojový kód.
Endianita určuje,
jak jsou v počítačové paměti ukládána čísla větší než 255.
Little endian ukládá méně významný bajt jako první (na nižší adresu).
Tato endianita se používá na osobních počítačích s architekturou Intel x86.
Big endian ukládá významnější bajt jako první.
Podle normy Unicode je to výchozí volba, pokud není výslovně specifikováno jinak.
Tento atribut má smysl pouze při kódování UTF-16 a UTF-32.
Názvy kódování by měly být upřesněny uvedením přípony LE
nebo BE
, nepovinně oddělené třeba pomlčkou nebo lomítkem:
UTF-16/LE
, utf32be
apod.
BOM neboli Byte Order Mark je speciální znak, který se může vyskytnout na samém začátku souborů kódovaných v Unicode, a určuje jeho endianitu.
EuroConvertor respektuje výskyt BOM při kódování UTF-16 a UTF-32,
nebyla-li jejich endianita výslovně specifikována příponou
/LE
nebo /BE
u názvu vstupního kódování.
Pokud přípona chybí a pokud text nezačíná znakem BOM, endianita bude určena
autodetekcí.
Samotný znak BOM na začátku vstupního textu je vždy z konverze vynechán.
Do výstupního textu bude zapsán pouze tehdy, bylo-li to vyžádáno připojením
modifikátoru /BOM
k názvu výstupního UTF kódování.
Příklad:
euroconv utf-8 utf-16le-bom input.txt output.txt
.
EuroConvert umí detekovat
HTML entity ve vstupním textu a převést je na odpovídající znak.
K tomu dochází po připojení modifikátoru /HTML
k názvu vstupního kódování.
Obdobný modifikátor /HTM
omezí konverzi entit
pouze na ty, jejichž hodnota je větší než 127, což znamená, že ASCII entity
&, <, >, "
projdou konvertorem nezměněny.
Ve výchozím stavu se ignorují všechny HTML entity.
Přítomnost modifikátoru /HTML
u specifikace výstupního kódu
způsobí, že znaky neplatné ve výstupní kódové stránkce budou převedeny
na odpovídající hexadecimální HTML entity.
Podobně modifikátor /QM
předepisuje, že se neplatné znaky
při konverzi nahradí otazníkem ?.
Je-li uveden modifikátor /IGN
, neplatné znaky budou ignorovány
a vynechány ve výstupním textu.
Není-li použit žádný modifikátor, anebo je-li použit /TRANSL
,
znaky neexistující ve výstupním kódování se nahrazují transliterací do ASCII znaků.
Transliterace odstraňuje diakritická znaménka ze znaků latinské abecedy,
písmena jiných abeced nahrazuje foneticky podobnými znaky latinských písmen,
grafické symboly nahrazuje vzhledově podobnými symboly z tabulky ASCII.
Výskyt ilegálního znaku ve vstupním kódování inkrementuje počet vstupních chyb. Za ilegální se považují znaky, které nejsou definovány v proklamovaném vstupním kódování.
Je-li vstupní text prohlášen za kódovaný jako ASCII, kterýkoli bajt s hodnotou mezi 128 a 255 je ilegální.
V 8bitovém kódování OEM a ANSI jsou obvykle využívány všechny pozice. Výjimky jsou vzácné, například jihoevropské kódování ISO-8859-3 deklaruje jako neplatné hodnoty bajtů 165, 174, 190, 195, 208, 227, 240.
V kódováních Unicode jsou definovány znaky s hodnotou codepoint ze základní
roviny BMP (Basic Multilingual Plane) v rozashu 0..0xD7FF a 0xE000..0xFFFF,
a dále znaky ze Supplementary Planes v rozsahu 0x10000..10FFFF.
Neúplné hodnoty (lichý počet bajtů ve vstupním souboru) a nespárované
dvojice surrogate v kódu UTF-16 také zvyšují čítač vstupních chyb.
U kódování UTF-8 jsou neplatně zakódované znaky popsány ve
Wikipedii
(jedná se o chybějící pokračovací bajty, nadbytečně dlouhé zakódování, neplatné hodnoty codepoint).
Čítač výstupních chyb se zvyšuje za každý znak, který nelze převést do
zvoleného výstupního kódu. Na tyto ilegální znaky EuroConvertor
reaguje jednou za čtyř možností vybranou modifikátorem
/IGN
, /QM
, /HTML
nebo /TRANSL
,
viz výše.
Znaky z rozšiřujících rovin Unicode, jako jsou asijské ideogramy a emoji, nejsou definovány v žádných OEM ani ANSI kódováních. Texty obsahující tyto znaky mohou být úspěšně převáděny pouze z jednoho kódování UTF do jiného.
Po ukončení převodu vypisuje EuroConvertor do konzolového okna závěrečnou rekapitulaci. Ta obsahuje pro vstupní i výstupní text název souboru, jeho délku, kódování a počet chyb.
Velikost konvertovaných souborů je omezena na 2 GB.
Konverze je vratná, pokud čítač vstupních i výstupních chyb kódování jsou nulové. Pouze v takovém případě by konvertovaný soubor mohl být převeden zpět do původního kódování bez ztráty informace.
Úspěšnost konverze indikuje EuroConvertor hodnotou Errorlevel takto:
0 ... Úspěšně převedeno, žádné chyby kódu na vstupu ani výstupu.
2 ... Soubor byl konvertován, ale některé znaky nemohly být převedeny. Konverze není bezztrátová.
4 ... Chyba čtení nebo zápisu do souboru, vstupní text nenalezen, plný disk apod.
8 ... Chyba syntaxe, nesprávně zadané parametry.