UTF-8 (ang. 8-bit Unicode Transformation Format) – system kodowania Unicode, wykorzystujący od 1 do 4 bajtów do zakodowania pojedynczego znaku, w pełni kompatybilny z ASCII.
| Ten artykuł od 2021-04 zawiera treści, przy których brakuje odnośników do źródeł. |
Jest najczęściej wykorzystywany do przechowywania napisów w plikach i komunikacji sieciowej.
Mapowanie znaków Unicode na ciągi bajtów możliwe jest na jeden z czterech sposobów:
Znaki z przedziału ASCII (0 do 127) kodowane są jako jeden bajt, czyli m.in. litery alfabetu łacińskiego. Polskie litery diakrytyzowane kodowane już są jako dwa bajty.
W listopadzie 2003 roku kodowanie UTF-8 zostało ograniczone zgodnie z RFC 3629 ↓, w celu zapewnienia zgodności z ograniczeniami kodowania UTF-16. Po pierwsze ograniczono maksymalny kod do U+10FFFF. Wcześniej wynosił on U+7FFFFFFF, dopuszczalne były sekwencje złożone z 5 i 6 bajtów, a 4-bajtowe mogły kodować znaki do U+1FFFFF. Po drugie zabroniono kodów z zakresu od U+D800 do U+DFFF, co pomniejszyło liczbę dopuszczalnych kodów o dodatkowe 2048. W ten sposób pozostało dokładnie 17 · 65536 − 2048 kodów, co oznacza że w UTF-8 można zakodować 1 112 064 różnych znaków.
Teoretycznie w UTF-8 ten sam znak można zapisać na kilka sposobów. Przykładowo znak ASCII / (ukośnik) można by zapisać jako:
Stanowi to zagrożenie bezpieczeństwa m.in. dla serwerów, które sprawdzają obecność znaku / w ścieżkach. Z tego powodu standard UTF-8 przewiduje, że poprawny jest wyłącznie najkrótszy możliwy sposób zapisu, a każdy program musi odrzucać znaki zapisane dłuższymi sekwencjami niż minimalna.
Kodowanie na podstawie znaku euro €:
20AC
to binarnie 0010 0000 1010 1100
po uzupełnieniu wiodącymi zerami do 16 bitów, ponieważ tyle bitów trzeba zakodować na 3 bajtach w UTF-8.1110…
).1110 0010
), a reszta bitów dzielona jest na dwa bloki po 6 bitów każdy (…0000 1010 1100
).10
, by tworzyły następujące 8-bitowe wartości 1000 0010
i 1010 1100
).1110 0010
1000 0010
1010 1100
, co w systemie szesnastkowych przyjmuje postać E2 82 AC
.Poniższa tabela pozwala zrozumieć sposób kodowana różnej długości numerów kodowych Unicode w UTF-8.
Unicode | Unicode binarnie | UTF-8 binarnie 1. bajt 2. bajt 3. bajt 4. bajt | UTF-8 szesnastkowo | |
---|---|---|---|---|
$ | U+0024 | 0100100 | 00100100 | 24 |
¢ | U+00A2 | 000 10100010 | 11000010 10100010 | C2 A2 |
€ | U+20AC | 00100000 10101100 | 11100010 10000010 10101100 | E2 82 AC |
𐍈 | U+10348 | 00001 00000011 01001000 | 11110000 10010000 10001101 10001000 | F0 90 8D 88 |
This article uses material from the Wikipedia Polski article UTF-8, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Treść udostępniana na licencji CC BY-SA 4.0, jeśli nie podano inaczej. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Polski (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.