Movatterモバイル変換


[0]ホーム

URL:


Przejdź do zawartości
Wikipediawolna encyklopedia
Szukaj

UTF-8

Z Wikipedii, wolnej encyklopedii
Ten artykuł od 2021-04 zawiera treści, przy którychbrakuje odnośników do źródeł.
Należy dodaćprzypisy do treści niemających odnośników do źródeł. Dodanie listyźródeł bibliograficznych jest problematyczne, ponieważ nie wiadomo, które treści one uźródławiają.
Sprawdź w źródłach:Encyklopedia PWN •Google Books • Google Scholar •BazHum •BazTech •RCIN • Internet Archive (texts /inlibrary)
Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się wdyskusji tego artykułu.
Po wyeliminowaniu niedoskonałości należy usunąć szablon{{Dopracować}} z tego artykułu.

UTF-8 (ang. 8-bit Unicode Transformation Format) – system kodowaniaUnicode, wykorzystujący od 1 do 4 bajtów do zakodowania pojedynczego znaku, w pełni kompatybilny zASCII. Jest najczęściej wykorzystywany do przechowywania napisów w plikach i komunikacji sieciowej.

Zalety i wady

[edytuj |edytuj kod]

Zalety

[edytuj |edytuj kod]
  • Każdy tekst wASCII jest tekstem w UTF-8.
  • Żaden znak spoza ASCII nie zawiera bajtu z ASCII.
  • Zachowuje porządek sortowaniaUCS-4.
  • Typowy tekst ISO-Latin-X rozrasta się w bardzo niewielkim stopniu po przekonwertowaniu do UTF-8.
  • Nie zawiera bajtów 0xFF i 0xFE, więc łatwo można go odróżnić od tekstuUTF-16.
  • Znaki o kodzie różnym od 0 nie zawierają bajtu 0, co pozwala stosować UTF-8 w ciągach zakończonych zerem.
  • O każdym bajcie wiadomo, czy jest początkiem znaku, czy też leży w jego środku, co nie jest dostępne np. w kodowaniuEUC.
  • Nie ma problemów zlittle endian vsbig endian.
  • Jest domyślnym kodowaniem wXML (również w jego aplikacjach:XHTML,SVG,XSL,CML,MathML).

Wady

[edytuj |edytuj kod]
  • ZnakiCJK zajmują po 3 bajty zamiast 2 w kodowaniach narodowych.
  • Znaki alfabetów niełacińskich zajmują po 2 bajty zamiast jednego w kodowaniach narodowych.
  • UTF-8 nie używa przesunięć zasięgów, co stanowi dodatkowe utrudnienie dla implementacji UTF-8 (szczegóły poniżej)

Sposób kodowania

[edytuj |edytuj kod]

Mapowanie znaków Unicode na ciągi bajtów możliwe jest na jeden z czterech sposobów:

  • U+00 doU+7F       0xxxxxxx, gdzie kolejne „x” to bity od najstarszego,
  • U+80 doU+7FF      110xxxxx10xxxxxx,
  • U+800 doU+FFFF    1110xxxx10xxxxxx10xxxxxx,
  • U+10000 doU+10FFFF11110xxx10xxxxxx10xxxxxx10xxxxxx.

Znaki z przedziału ASCII (0 do 127) kodowane są jako jeden bajt, czyli m.in. literyalfabetu łacińskiego. Polskielitery diakrytyzowane kodowane już są jako dwa bajty.

W listopadzie 2003 roku kodowanie UTF-8 zostało ograniczone zgodnie zRFC 3629 ↓, w celu zapewnienia zgodności z ograniczeniami kodowania UTF-16. Po pierwsze ograniczono maksymalny kod doU+10FFFF. Wcześniej wynosił onU+7FFFFFFF, dopuszczalne były sekwencje złożone z 5 i 6 bajtów, a 4-bajtowe mogły kodować znaki doU+1FFFFF. Po drugie zabroniono kodów z zakresu odU+D800 doU+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 znakASCII/ (ukośnik) można by zapisać jako:

  • 00101111,
  • 1100000010101111,
  • 111000001000000010101111,
  • 11110000100000001000000010101111.

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.

Przykład

[edytuj |edytuj kod]

Kodowanie na podstawie znaku euro:

  1. Znak € wUnicode ma oznaczenie U+20AC.
  2. Zgodnie z informacjami w poprzednim podrozdziale taka wartość jest możliwa do zakodowania na 3 bajtach.
  3. Liczba szesnastkowa20AC to binarnie0010 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.
  4. Kodowanie na trzech bajtach wymaga użycia w pierwszym bajcie trzech wiodących bitów ustawionych na 1, a czwartego na 0 (1110).
  5. Pozostałe bity pierwszego bajtu pochodzą z najstarszych czterech bitów kodowanej wartości w Unicode, co daje (11100010), a reszta bitów dzielona jest na dwa bloki po 6 bitów każdy (0000 1010 1100).
  6. Do tych bloków dodawane są wiodące bity10, by tworzyły następujące 8-bitowe wartości1000 0010 i1010 1100).
  7. W ten sposób rezultatem są trzy bajty w postaci111000101000 00101010 1100, co w systemie szesnastkowych przyjmuje postaćE282AC.

Poniższa tabela pozwala zrozumieć sposób kodowana różnej długości numerów kodowych Unicode w UTF-8.

UnicodeUnicode binarnieUTF-8 binarnie
 1. bajt   2. bajt   3. bajt   4. bajt
UTF-8 szesnastkowo
$U+002401001000010010024
¢U+00A2000 101000101100001010100010C2A2
U+20AC00100000 10101100111000101000001010101100E282AC
𐍈U+1034800001 00000011 0100100011110000100100001000110110001000F0908D88

Zobacz też

[edytuj |edytuj kod]

Linki zewnętrzne

[edytuj |edytuj kod]
Źródło: „https://pl.wikipedia.org/w/index.php?title=UTF-8&oldid=77618043
Kategoria:
Ukryta kategoria:

[8]ページ先頭

©2009-2026 Movatter.jp