Invia.cz
Eurovíkendy
Kanárské ostrovy
Dominikánská republika
Madeira
Last minute
Vydělávejte peníze s INVIA.CZ
UTF-8 je zkratka pro UCS Transformation Format. Je to způsob kódování řetězců znaků Unicode/UCS do sekvencí bajtů. Varianta UTF-16 kóduje řetězce do posloupností 16bitových slov (2 bajty), Varianta UTF-32 do 32 bitových slov (4 bajty). UTF-8 je definováno v ISO 10646-1:2000 Annex D, v RFC 3629 a v Unicode 4.0.
Obsah |
Přirozené kódování znaků Unicode/UCS do 2 nebo 4 bajtů se nazývá UCS-2 a UCS-4. Pokud se nespecifikuje jinak, ukládá se nejprve nejvýznamnější bajt (tzv. konvence big-endian). S řetězci uloženými ve formátu UCS-2 nebo UCS-4 je spojeno několik problémů:
Z uvedených důvodů není formát UCS-2 a UCS-4 vhodný pro ukládání řetězců do souborů.
Tyto problémy řeší kódování UTF-8, které má následující vlastnosti:
Následující tabulka ukazuje způsob kódování. Pozice bitů „xxx“ jsou vyplněny bity kódu znaku, vpravo jsou nejméně významné bity. Pro kód znaku musí být použita nejkratší možná sekvence bajtů. Počet bitů v prvním bajtu ve vícebajtové sekvenci odpovídá počtu bajtů sekvence.
| U+00000000 - U+0000007F | 0xxxxxxx |
| U+00000080 - U+000007FF | 110xxxxx 10xxxxxx |
| U+00000800 - U+0000FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
| U+00010000 - U+001FFFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
| U+00200000 - U+03FFFFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
| U+04000000 - U+7FFFFFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
| Sekvence bajtů (hexadecimálně) | Kódování |
|---|---|
| 00 00 FE FF | UTF-32 big-endian |
| FF FE 00 00 | UTF-32 little-endian |
| FE FF | UTF-16 big-endian |
| FF FE | UTF-16 little-endian |
| EF BB BF | UTF-8 |
Znak s kódem U+FEFF (v desítkové soustavě 65279) se nazývá BOM (Byte-Order Mark, česky přibližně „označení pořadí bajtů“), někdy také „UTF signatura“. V kódování UTF-8 je tento znak reprezentován trojicí bajtů 0xEF 0xBB 0xBF, v kódování UTF-16 big-endian dvojicí bajtů 0xFE 0xFF a v UTF-16 little-endian 0xFF 0xFE. Grafický význam znaku je „nedělitelná mezera nulové šířky“ (zero-width no-break space), je tak podobný znaku U+2060 (word joiner). [1] Hlavním důvodem užití tohoto znaku je rozlišení pořadí ukládání bajtů big-endian nebo little-endian v UTF-16 a odlišení samotného UTF-16 od UTF-8. V případě záměny pořadí bajtů není znak U+FFFE platný Unicode znak, navíc v kódování UTF-8 se bajty 0xFE a 0xFF nesmí vyskytovat. Užití BOM v UTF-8 je pro účel rozpoznání pořadí ukládání bajtů nadbytečné, nicméně množství aplikací operačního systému Microsoft Windows používá tento znak na začátku souboru pro rozlišení souborů uložených ve formátu UTF-8. V některých systémech (POSIX) není tato signatura používána a může být zdrojem problémů.