UTF-16

UTF-16 (ang. 16-bit Unicode Transformation Format) – jeden ze sposobów kodowania znaków standardu Unicode. Sposób ten wymaga użycia szesnastobitowych słów, przy czym dla znaków na pozycjach poniżej U+10f (dziesiętnie 65536), a dokładnie w zakresach od U+0000 do U+D7FF i U+E000 do U+FFFF, używane jest jedno słowo, którego wartość odpowiada dokładnie pozycji znaku w standardzie.

W systemach Windows kodowanie to jest najczęściej używane do wewnętrznego przechowywania komunikatów Unicode[1].

Kodowanie na 4 bajtach

Dla znaków z wyższych pozycji używa się dwóch słów, pierwsze z nich należy do przedziału od U+D800 do U+DBFF, drugie natomiast od U+DC00 do U+DFFF. Oznacza to, iż znaki z zakresu od U+10000 do U+10FFFF kodowane są w następujący sposób:

  • od numeru znaku odejmowane jest 0x10000, tak aby pozostała 20-bitowa liczba z zakresu od 0 do 0xFFFFF;
  • wartość tworzona przez najstarsze 10 bitów tej liczby jest dodawana do 0xD800 i otrzymuje się bardziej znaczące 16-bitowe słowo z zakresu od 0xD800 do 0xDBFF;
  • pozostałe 10 młodszych bitów jest dodawane do 0xDC00, co daje mniej znaczące 16-bitowe słowo z zakresu od 0xDC00 do 0xDFFF.

Kodowanie to przedstawia poniższa tabela:

KOD DC00 DC01    …    DFFF
D800 010000 010001 0103FF
D801 010400 010401 0107FF
  ⋮
DBFF 10FC00 10FC01 10FFFF

Na przykład znak o kodzie U+10000 zostanie zamieniony na sekwencję 0xD800 0xDC00, zaś znak o kodzie 0x10FFFF (górna granica unikodu) na 0xDBFF 0xDFFF. W standardzie Unicode pozycjom z przedziału od U+D800 do U+DFFF nie są przypisane żadne znaki, zatem każda sekwencja słów kodowych jest interpretowana jednoznacznie.

Przykład

  1. Odjęcie 0x10000 od 0x10437 daje w wyniku 0x00437, czyli binarnie 0000 0000 0100 0011 0111.
  2. Rozdzielenie powstałego ciągu 20 bitów na dwie grupy, po 10 bitów każda 0000000001 0000110111.
  3. Dodanie 0xD800 do pierwszej wartości: 0xD800 + 0x0001 = 0xD801.
  4. Dodanie 0xDC00 do drugiej wartości: 0xDC00 + 0x0037 = 0xDC37.
  5. W ten sposób rezultatem są cztery bajty w postaci D8 01 DC 37.


Poniższa tabela pozwala zrozumieć sposób kodowana różnej długości numerów kodowych Unicode w UTF-16. Dodatkowe bity dodane przez kodowanie pokazane są na czarno

Unicode Unicode binarnie UTF-16 binarnie UTF-16
szesnastkowo
UTF-16
dla Big-endian
UTF-16
dla Little-endian
$ U+0024 00000000 00100100 00000000 00100100 0024 00 24 24 00
U+20AC 00100000 10101100 00100000 10101100 20AC 20 AC AC 20
𐐷 U+10437 0001 00000100 00110111 11011000 00000001 11011100 00110111 D801 DC37 D8 01 DC 37 01 D8 37 DC
𤭢 U+24B62 0010 01001011 01100010 11011000 01010010 11011111 01100010 D852 DF62 D8 52 DF 62 52 D8 62 DF

Zobacz też

Przypisy

Linki zewnętrzne

  • P. Hoffman, F. Yergeau, UTF-16, an encoding of ISO 10646, RFC 2781, IETF, luty 2000, DOI10.17487/RFC2781, ISSN 2070-1721, OCLC 943595667 (ang.).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.