reklama

Znakové sady textov : smerovanie k UTF-8

V článku je k dispozícii spracovanie výsledkov intenzívneho vyhľadávania na internete. V rámci všeobecnej "počítačovej gramotnosti", nezaškodí poznať základy tejto užitočnej i zaujímavej témy, ktorá je aktuálnou najmä pri využívaní i internetových prehliadačov a emailovej komunikácie.

Písmo: A- | A+
Diskusia  (1)

Počítač pracuje interne len s číslami, dané číslo je vyjadrené kombináciou bitov. Každý bit môže nadobúdať hodnotu 1 (true) alebo 0 (false). Každý znak v textovom súbore je reprezentovaný kombináciou bitov, ktoré dokopy tvoria číslo v dvojkovej (binárnej) sústave. Aby počítačový program (prehliadač, textový editor...) vedel, ako má bity v do textového súboru ukladať a naopak ich zasa interpretovať, musí poznať

  • znakovú sadu a

  • kódovanie znakov

Znaková sada (character set / charset)

Znaková sada obsahuje znaky a ich kódy.

Najjednoduchšou a najdlhšie známou znakovou sadou je štandard ASCII - The American Standard Code for Information Interchange. Je to kódovací algoritmus znakov, pôvodne založený na anglickej abecede, ktorý kóduje 128 špecifikovaných znakov: číslá 0-9, písmená a-z a A-Z, niektoré základné interpunkčné symboly, niektoré riadiace kódy a znak medzery, do 7-bit binárnych čísiel. Kódy ASCII representujú text v počítačoch, komunikačných zariadeniach a ďalších zariadeniach, ktoré používajú text. Obsahuje znaky s číslami pozícií v sade 0 až 127, spolu 128. To však postačuje len pre angličtinu. Ostatné jazyky tu nemajú miesto pre svoje špecifické znaky, ako sú najmä písmená s diakritickými znamienkami.
Preto vzniklo niekoľko 8 bitových (1 bajtových, bajt / byte = 8 bitov) znakových sád, ktoré obsahujú až 28 = 256 znakov. Prvých 128 znakov a ich kódov je zhodných s ASCII, druhá polovica sady obsahuje špecifické znaky pre daný jazyk.
Takto vznikla napr. sada pre západoeurópske jazyky (ISO 8859-1, označovaná aj ako ISO Latin 1) alebo stredoeurópske jazyky (ISO 8859-2 alebo ISO Latin 2); sem patrí aj slovenčina a čeština. Tieto znakové sady sú štandardizované organizáciou ISO (International Standard Organisation). Okrem toho ešte Microsoft zaviedol vlastné verzie týchto sád, ktoré sa používajú vo Windows; pre stredoeurópske jazyky je to sada windows-1250. Tieto sady sú takmer rovnaké ako sady ISO uvedené vyššie, no niektoré znaky majú na odlišných pozíciách.

SkryťVypnúť reklamu
Článok pokračuje pod video reklamou

Kódovanie znakov (character encoding)

Znaková sada definuje priradenie konkrétnych znakov k ich kódom.
Pre danú znakovú sadu kódovanie určuje, ako je pozícia znaku v znakovej sade konvertovaná na sekvenciu bitov.

Unicode a UCS

Ani rozšírené 8-bitové znakové sady s kapacitou 256 znakov nie sú celkom vyhovujúcim riešením, pretože v nich a) nie je v nich dosť miesta pre niektoré jazyky, b) nie je možné v jednom súbore použiť znaky viac ako jedného jazyka.

Preto vznikli znakové sady, v ktorých je dostatok miesta pre všetky znaky všetkých používaných jazykov. Ku koncu osemdesiatych rokov 20. storočia vznikla naliehavá potreba zjednotiť rôzne kódové tabuľky znakov pre národné abecedy.
V tom čase vznikli súčasne dva projekty pre vytvorenie univerzálnej kódovacej tabuľky znakov. Bol to projekt ISO 10646 organizácie ISO (International Standard Organisation) a projekt Unicode.

Norma ISO definuje tzv. UCS (Universal Character Set / Univerzálna sada znakov).
UCS obsahuje všetky znaky všetkých kódovaní znakových sád. Navyše garantuje kompatibilitu spätnej konverzie, teda je možné zostaviť konverzné tabuľky tak, aby nedochádzalo ku strate informácie pri konverzii z iného kódovania do UCS a nazad.

SkryťVypnúť reklamu
reklama

Štandard Unicode definuje numerickú hodnotu a názov pre každý zo svojich znakov.
Rieši zásadný problém globálnej výmeny informácií - jednoznačný zápis spôsobom, ktorý zabezpečí konzistenciu a bezproblémové používanie. Roku 1991 bolo, po niekoľkých rokoch neformálnej spolupráce, založené Unicode Consorcium, s cieľom usilovať sa o zavedenie a další vývoj 16 bitového kódovania pre znaky nejdôležitejších svetových jazykov, spolu s veľa historickými a archaickými znakmi. Výsledkem jeho práce je standard Unicode, ktorý sa stal tiež súčasťou širšieho štandardu ISO 10646.

Kódový priestor Unicode je rozdelený do 17 skupín (planes), číslovaných od 0 do 16:
plane 0: Basic Multilingual Plane BMP, 0000-FFFF 
plane 1: Supplementary Multilingual Plane SMP, 10000-1FFFF
- - -
planes 15-16: Supplementary Private Use Area SPUA A/B, F0000-10FFFF

SkryťVypnúť reklamu
reklama

Prvá skupina „0" nazvaná Basic Multilingual Plane (BMP), obsahuje znaky pre takmer všetky moderné jazyky ako aj množstvo špeciálnych znakov.
Doplnkové skupiny obsahujú len exotické znaky pre osobitné vedecké použitie, publikovanie, vysokoúrovňové protokoly a pod.
Znaková sada Unicode môže byť implementovaná viacerými systémami kódovania znakov. V súčasnosti, najpoužívanejším kódovaním je systém UTF-8, ktorý znaky kóduje do dvoch až šiestich bajtov, pričom všetky používajú hodnotu pozície v sade znakov nad 127 - nie je ich teda možné zameniť so znakmi ASCII.

V r. 1991 došlo k dohode a projekty Unicode a UCS spojili svoje úsilie na vytvorenie jednotnej tabuľky. Oba projekty stále existujú a publikujú svoje štandardy samostatne, ale tabuľky znakov sú kompatibilné.
V obidvoch systémoch, kódovanie pre znaky mezi 0x0000 a 0x007F je zhodné so základnou sadou ASCII a znaky medzi 0x0000 a 0x00FF sú zhodné so sadou ISO 8859-1 / Latin-1.

SkryťVypnúť reklamu
reklama

Unicode má aj niekoľko nevýhod a to:
- 256× väčšia znaková sada: pokiaľ uvážime, že vo veľa jazykoch sa využije jen malá časť z celkového množstva, tak znaky zbytočne zaberajú miesto.
- nezlučiteľnosť s 8-bit prostredím: Unicode text môže mať znaky, ktoré v "normálnom", 8-bit texte normálne nie sú a väčšinou majú špeciálny význam. Nedá sa teda použiť stávajúci programový kód pre práci s textom. Nejde ľahko zistiť, či text je v Unicode alebo nie, nedá sa preto ľahko používať Unicode a nejaké ďalšie 8-bit kódovanie. Nie je možné prejsť na Unicode len sčasti, je nutný celkový prechod, aby aplikácie nielen dostali text v Unicode, ale aby Unicode text i očakávali.

Kódovací algoritmus UTF-8

Pôvodná špecifikácia pre UTF-8 definovala kapacitu až do 6 bajtov formátu. V novembri 2003 bola táto kapacita štandardom RFC 3629 obmedzená. Odvtedy už 5- a 6-bajtové sekvencie nie sú využívané.
Pre znaky stredoeurópskeho typu navyše celkom postačuje kapacita kódu s max. 3 bajtami, pre názornosť je tu kódovací algoritmus UTF-8 vysvetlený len pre tento rozsah.
Nasledujúca tabuľka ukazuje formát sekvencií bajtov UTF-8.

UTF-8 formát

Unicode (hex)

UTF-8 bajtov

UTF-8 bitov

0xxxxxxx

U-0000 až 007F

1

7

110xxxxx
10xxxxxx

U-0080 až 07FF

2

11

1110xxxx
10xxxxxx
10xxxxxx

U-0800 až FFFF

3

16

Kódové pozície Unicode s indexom vyšším ako 127 (dec) resp. 007F (hex) , sú v UTF-8 reprezentované viac-bajtovými sekvenciami, zloženými z

  • LB vedúci / prvý bajt (Leading Byte)

  • CB1, CB2 jeden alebo viac ďalších bajtov (Continuation Byte).

Skelet formátu UTF-8 pre sekvenciu LB + CB1 je ukázaný v 2. riadku tabuľky.
Skelet formátu UTF-8 pre sekvenciu LB + CB1 + CB2 je ukázaný v 3. riadku tabuľky.

Poznámka: MSB Most Significant Bit / Bit s najvyššou váhou

Charakteristické vlastnosti algoritmu UTF-8 sú nasledovné

  1. Jedno-bajtové kódy sú použité len pre hodnoty ASCII v rozsahu 0 až 127. V tomto prípade, UTF-8 kód má tú istú hodnotu ako kód ASCII.

  2. Kódové pozície vyššie ako 127 sú reprezentované viac bajtovými sekvenciami, zloženými z prvého bajtu LB a jedného alebo viac ďalších bajtov CB.

  3. Prvý bajt LB má v pozíciách MSB bitov dve alebo viac "1", nasledovaných "0". Počet týchto bitov "1" určuje počet bajtov v sekvencii UTF-8.

  4. Ďalšie bajty CB1 a CB2 majú v pozíciách MSB "10". Takto, kapacita každého CB je 10000000 až 10111111 (bin), resp. 0x80 až 0xBF (hex).

  5. Skelety pre sekvenciu LB + CB1 a pre LB + CB1+CB2 majú, ako ukazuje tabuľka, na pozíciách bitov MSB hodnotu "1" alebo "0". Tieto fixne určené "služobné" bity formátu kódovania UTF-8 nevstupujú do určovania hodnoty kódu znaku.

  6. Bity znázornené v tabuľke symbolmi „x" slúžia k vlastnému účelu určovania hodnoty kódu znaku. Bity vyššieho rádu idú do LB bajtu, bity nižšieho rádu do nasledujúcich CB bajtov. Počet bajtov v kódovaní je určený ako minimálne potrebný pre umiestnenie všetkých platných bitov, prislúchajúcich danej kódovej pozícii.

Poznámka:
Ak uvidíme v nejakej aplikácii čudný text ("rozsypaný čaj" ...), kde sa budú vyskytovať znaky alebo dvojice znakov ako
á ä ÄŤ ÄŹ Ă© Ă­ Äľ Äş Ĺ^ Ăł Ă´ Ĺ• š ĹĄ Ăş Ă˝ Ĺľ , 
znamená to zvyčajne, že si súbor uložený v kódovaniu UTF-8 prezeráme pomocou programu, ktorý nevie vykonať správne dekódovanie sekvencií bajtov UTF-8 nazad na Unicode prvky a tieto znaky následne zobraziť.

Príklady kódovania UTF-8:
Znak Unicode (symbol € pre euro) je U+20AC. Podľa tabuľky algoritmizácie vyššie, znak zaberie pre zakódovanie tri bajty, lebo jeho pozícia je medzi U+0800 a U+FFFF.
U+20AC (hex) je 0010 0000 1010 1100 (bin).
Keďže je to troj-bajtové kódovanie, prvý bajt začína tromi 1 nasledovanými 0 (1110 ... )

Ak umiestnime 16 bitov príslušných U+20AC do 16 pozícií "x", dostaneme UTF-8 zakódovanie znaku ako: 11100010 1000010 10101100.
Pre bity "x"prvého bajtu sú prevzaté prvé 4 bity znaku € U+20AC (11100010), ponechávajúc 0000 1010 1100 pre ďalšie bajty sekvencie.
Každý z ďalších dvoch bajtov začína 10 a preberá šesť bitov znaku € U+20AC (10000010 druhý bajt, potom 10101100 tretí bajt).

Túto konverziu sumarizuje nasledovná tabuľka, spolu s doplnením i pre znaky $ a ä.
Farby indikujú, ako sú bity z kódovej pozície distribuované medzi bajty UTF-8.
Bity, doplnené v procese kódovania UTF-8, sú ukázané v čiernej farbe.

znak

kód Unicode

kód UTF-8 (bin)

kód UTF-8 (hex)

$ U+0024

0100100

0100100

24

ä U+00E4

000 10 100010

110 00010 10 100010

C3 A4

€ U+20AC

0010 0000 10 101100

1110 0010 10 000010 10 101100

E2 82 AC

Odkazy:

Unicode Characters http://www.danshort.com/unicode/

Windows-1250 http://en.wikipedia.org/wiki/Windows-1250

Miroslav Nesrsta

Miroslav Nesrsta

Bloger 
  • Počet článkov:  115
  •  | 
  • Páči sa:  33x

Pôvodom z Brna na Morave; dôchodca, žijem na Liptove od r. 1965. V aktívnom veku konštruktér v odbore IT.Blogovanie robím v rámci intelektuálnej aktivity 3. veku so záujmom porozprávať sa o témach spoločného záujmu. Zoznam autorových rubrík:  filozofia, politika, ekonomikavzdelávaniekultúraautoSúkromnéNezaradené

Prémioví blogeri

Juraj Hipš

Juraj Hipš

12 článkov
Karolína Farská

Karolína Farská

4 články
Pavol Koprda

Pavol Koprda

10 článkov
Monika Nagyova

Monika Nagyova

295 článkov
Iveta Rall

Iveta Rall

87 článkov
Adam Valček

Adam Valček

14 článkov
reklama
reklama
SkryťZatvoriť reklamu