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
- Odjęcie
0x10000od0x10437daje w wyniku0x00437, czyli binarnie0000 0000 0100 0011 0111. - Rozdzielenie powstałego ciągu 20 bitów na dwie grupy, po 10 bitów każda
00000000010000110111. - Dodanie
0xD800do pierwszej wartości:0xD800+0x0001=0xD801. - Dodanie
0xDC00do drugiej wartości:0xDC00+0x0037=0xDC37. - 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, DOI: 10.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.
- 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:
- 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.
- 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.
- 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.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.