UTF-16: Różnice pomiędzy wersjami

Dodane 2640 bajtów ,  5 lat temu
przykład + tabela
m (drobne merytoryczne)
(przykład + tabela)
'''UTF-16''' ([[język angielski|ang.]] ''16-bit Unicode Transformation Format'') – w [[Informatyka|informatyce]] jeden ze sposobów kodowania znaków standardu [[Unicode]]. Sposób ten wymaga użycia szesnastobitowych słów ([[Język angielski|ang.]] ''word''), przy czym dla znaków na pozycjach poniżej U+10000 (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 napisów Unicode<ref name="wxw">[http://docs.wxwidgets.org/3.0/overview_unicode.html Unicode Support in wxWidgets]</ref>.
 
== 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;
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 [[symbol|znaki]], zatem każda sekwencja słów kodowych jest interpretowana jednoznacznie.
 
== Przykład ==
W systemach Windows kodowanie to jest najczęściej używane do wewnętrznego przechowywania napisów Unicode<ref name="wxw">[http://docs.wxwidgets.org/3.0/overview_unicode.html Unicode Support in wxWidgets]</ref>.
Kodowanie na podstawie znaku U+10437 (𐐷):
# Odjęcie <code>0x10000</code> od <code>0x10437</code> daje w wyniku <code>0x0437</code>, czyli binarnie <code>0000 0100 0011 0111</code>.
# Rozdzielenie pozostałego ciągu 20 bitów na dwie grupy, po 10 bitów każda <code>{{Kolor|#00AA00|0000000001}}</code> <code>{{Kolor|#0070FF|0000110111}}</code>.
# Dodanie <code>0xD800</code> do pierwszej wartości: <code>0xD800</code> + <code>{{Kolor|#00AA00|0x0001}}</code> = <code>0xD8{{Kolor|#00AA00|01}}</code>.
# Dodanie <code>0xDC00</code> do drugiej wartości: <code>0xDC00</code> + <code>{{Kolor|#0070FF|0x0037}}</code> = <code>0xDC{{Kolor|#0070FF|37}}</code>.
# W ten sposób rezultatem są cztery bajty w postaci <code>{{Kolor|#00AA00|D8 01}} {{Kolor|#0070FF|DC 37}}</code>.
 
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
{| class="wikitable"
|-
! colspan=2 | Unicode
! Unicode binarnie
! UTF-16 binarnie
! UTF-16<br/>szesnastkowo
! UTF-16<br/>dla Bigendian
! UTF-16<br/>dla Littleendian
|-
| $ || U+0024
|align=right|<code>{{Kolor|#0070FF|00000000 00100100}}</code>
|align=right|<code>{{Kolor|#0070FF|00000000 00100100}}</code>
|align=right|<code>{{Kolor|#0070FF|0024}}</code>
|align=right|<code>{{Kolor|#0070FF|00 24}}</code>
|align=right|<code>{{Kolor|#0070FF|24 00}}</code>
|-
| € || U+20AC
|align=right|<code>{{Kolor|#0070FF|00100000 10101100}}</code>
|align=right|<code>{{Kolor|#0070FF|00100000 10101100}}</code>
|align=right|<code>{{Kolor|#0070FF|20AC}}</code>
|align=right|<code>{{Kolor|#0070FF|20 AC}}</code>
|align=right|<code>{{Kolor|#0070FF|AC 20}}</code>
|-
| 𐐷 || U+10437
|align=right|<code>{{Kolor|#00AA00|0001 000001}}{{Kolor|#0070FF|00 00110111}}</code>
|align=right|<code>'''110110'''{{Kolor|#00AA00|00 00000001}}</code> <code>'''110111'''{{Kolor|#0070FF|00 00110111}}</code>
|align=right|<code>{{Kolor|#00AA00|D801}} {{Kolor|#0070FF|DC37}}</code>
|align=right|<code>{{Kolor|#00AA00|D8 01}} {{Kolor|#0070FF|DC 37}}</code>
|align=right|<code>{{Kolor|#00AA00|01 D8}} {{Kolor|#0070FF|37 DC}}</code>
|-
| 𤭢 || U+24B62
|align=right|<code>{{Kolor|#00AA00|0010 010010}}{{Kolor|#0070FF|11 01100010}}</code>
|align=right|<code>'''110110'''{{Kolor|#00AA00|00 01010010}}</code> <code>'''110111'''{{Kolor|#0070FF|11 01100010}}</code>
|align=right|<code>{{Kolor|#00AA00|D852}} {{Kolor|#0070FF|DF62}}</code>
|align=right|<code>{{Kolor|#00AA00|D8 52}} {{Kolor|#0070FF|DF 62}}</code>
|align=right|<code>{{Kolor|#00AA00|52 D8}} {{Kolor|#0070FF|62 DF}}</code>
|}
 
== Zobacz też ==