# UTF-8

**UTF-8** estas kodoprezento, maniero prezenti unikodajn signonumerojn per sinsekvo da bajtoj. Ĝia nomo devenas de la anglalingva mallongigo *Unicode Transformation Format* (unikoda transforma aranĝo). La nombro "8" indikas la fakton, ke la signonumerojn oni malkomponas en 8-bitajn bajtojn, bitokojn.
Tia perbajta kodoprezento havas varian longon, de 1 ĝis 4 bajtoj.

UTF-8 estas difinita en la normo RFC 3629. Principe ĝia skemo povas uzi ĝis 6 bitokojn por unu signo, sed la Unikodaj signonumeroj ne superas 17·216, kaj por tiuj sufiĉas 4 bitokoj.

UTF-8 sekvas la principon, ke la komenca bitoko de signonumero estu klare rekonebla. Tial eblas malkodi kodoprezenton de signoĉeno ne nur ekde la komenco, sed de ajna ties pozicio. Tio funkcias, ĉar la unua bitoko en signonumero neniam komenciĝas per la bitoj "10", sed la sekvaj bitokoj ĉiam. Krome, la unua bitoko klare indikas, kiom da bitokoj havas la prezento de signonumero — nome tiom, kiom da unuoj (kiom da bitoj "1") aperas komence de la unua bitoko. Escepto estas la unubajtaj prezentoj de signonumeroj, kiuj komenciĝas per "0".

## Difino

Jena tabelo montras la strukturon de la 1-, 2-, 3- kaj 4-bitokaj prezentoj de signonumeroj (x-oj indikas variajn bitojn informajn, kiuj konsistigas la propran numeron):

|  |  |  |
| --- | --- | --- |
| Unikoda intervalo, dek-ses-ume
 | UTF-8, du-ume
 | Rimarkigo
 |
| 0x000000 - 0x00007F
 | 0xxxxxxx
 | kodoj identaj al Askio; la bitoko komenciĝas per 0
 |
| 0x000080 - 0x0007FF
 | 110xxxxx 10xxxxxx
 | la unua bitoko komenciĝas per 110, la dua per 10
 |
| 0x000800 - 0x00FFFF
 | 1110xxxx 10xxxxxx 10xxxxxx
 | la unua bitoko komenciĝas per 1110, la dua kaj tria per 10
 |
| 0x010000 - 0x10FFFF
 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 | la unua bitoko komenciĝas per 11110, la tri sekvaj per 10
 |

## Avantaĝoj de UTF-8

1. Ĉiu teksto askia estas ankaŭ teksto en UTF-8.
2. Neniu kodoprezento neaskia entenas bajton kun valoro de signokodo askia.
3. Signoĉenoj en UTF-8 ĉe laŭbajta ordigo konservas la ordon de unikodaj signonumeroj entjeraj (UCS-4).
4. Averaĝa teksto prezentita en ISO-Latin-X (interalie, ISO 8859-3) nur tre malmulte ŝvelas ĉe transformo en la kondoprezenton UTF-8.
5. Kodoprezentoj de de signoj diferencaj disde NUL neniam entenas bajton egalan al 0, kio eblias uzi la tian bajton kiel finilon de signoĉeno, laŭ la programista tradicio.
6. Ĉar la komenca bajto de la prezentoj de signonumeroj estas aparte markita, eblas riparo de la interpreto ĉe la kutima laŭbajta datumtransmeto (diference disde ekz-e UTF-16).
7. Ne estas problemo pri la pezkomenca/pezfina numerado de bajtoj (angleendianness), kontraste al UTF-16 ktp.
8. UTF-8 estas defaŭlta kodoprezento en XML kaj rilataj formoj (XHTML, SVG, XSL, CML, MathML).

Oni kritikis pri UTF-8, ke la prezentoj de signonumeroj havas malsamajn longojn. Iam tiurilate la kodoprezento UTF-16 havis avantaĝon, sed de kiam 2 bitokoj ne plu sufiĉas por Unikodo, tiu avantaĝo malpliiĝis.

La fakto, ke la unu-bitokaj signoj komenciĝas ne per "10", sed per "0", impresas kiel neregulaĵo. Sendube tiun decidon kaŭzis la deziro de kongrueco kun 8-bita reprezento de Askio.

## Ekzemplo esperanta

Jen kiel la tradician ĉiuĉapelaĵon esperantan, prezentitan en UTF-8, vidigas la uniksa komando od (la neaskiaj kodoj en la supraj linioj, kaj ĉiuj kodoj en la malsupraj, aperas okume):

```
 $ echo "eĥoŝanĝo" | od -An -t co1
 e 304 245 o 305 235 a n 304 235 o \n
 145 304 245 157 305 235 141 156 304 235 157 012
 $ echo "ĉiuĵaŭde" | od -An -t co1
 304 211 i u 304 265 a 305 255 d e \n
 304 211 151 165 304 265 141 305 255 144 145 012
 $

```

Kompreneble, en normala esperanta teksto la averaĝa denso de ĉapelitaj literoj estas multe malpli granda.