UTF-16 (Unicode Transformation Format, 16 bit) è una codifica di caratteri Unicode in sequenze di numeri a 16-bit. UTF-16 è definito ufficialmente nell'allegato Q dello standard ISO/IEC 10646, e viene descritto nella versione 3.0 e successive de "the Unicode standard", oltre che nel documento RFC 2781 della IETF.
Codifica UTF-16
In UTF-16 i caratteri di Unicode con valore fino a 65535 (0xFFFF) vengono rappresentati con il loro valore numerico, espresso in 16 bit. I caratteri al di fuori del Basic Multilingual Plane, il cui codice è superiore a 65535 (0xFFFF) e non rappresentabile direttamente con 16 bit, vengono rappresentati con una coppia surrogata, ovvero una coppia di codici nell'intervallo da 0xD800 a 0xDFFF. Per esempio:
- il carattere "A", corrispondente al codice 65 (0x41), viene rappresentato come 0x0041
- il carattere 0x10000 diventa la coppia 0xD800, 0xDC00
- il carattere 0x10FFFD, corrispondente al limite superiore di Unicode, viene rappresentato con la sequenza 0xDBFF, 0xDFFD.
Unicode non assegna a nessun carattere un valore compreso tra 0xD800 e 0xDFFF, evitando in questo modo che i singoli elementi di una coppia surrogata possano essere confusi con un carattere Unicode valido.
Varianti di UTF-16
Ciascun code point UTF-16 viene memorizzato in un intero a 16 bit (uint16). Dato che l'ordine dei byte in una parola varia a seconda dell'architettura del calcolatore, UTF-16 prevede tre schemi di codifica, UTF-16, UTF-16LE (Little Endian) e UTF-16BE (Big Endian).
La codifica UTF-16 impone che l'ordine dei byte venga dichiarato esplicitamente aggiungendo un Byte Order Mark come prefisso di ogni testo codificato. Il BOM è la forma codificata del carattere Zero width, non breaking space, corrispondente all'esadecimale 0xFEFF, rappresentato come 0xFE,0xFF sui sistemi big endian e 0xFF, 0xFE sui sistemi little endian.
Le codifiche UTF-16BE e UTF-16LE sono identiche alla codifica UTF-16, con l'eccezione che l'ordine dei byte è implicito, big endian per UTF-16BE, e little endian per UTF-16LE. Il carattere 0xFEFF all'inizio di un testo rappresentato con una di queste due codifiche viene considerato parte del testo anziché come BOM.
La IANA ha approvato i nomi UTF-16, UTF-16BE e UTF-16LE, indifferentemente maiuscoli o minuscoli, per l'uso su Internet. I nomi UTF_16 o UTF16, comunemente usati, potrebbero essere riconosciuti da specifici linguaggi di programmazione o applicazioni, ma non sono ufficialmente validi.
UTF-16 è la rappresentazione nativa del testo per le versioni di Windows basate su NT, per il linguaggio di programmazione Java e per gli ambienti .NET e macOS Cocoa e Core.
Esempi
carattere Unicode | nome | codici UTF-16 | carattere* |
---|---|---|---|
122 (esadecimale 0x7A) | Z minuscola (alfabeto latino) | 007A | z |
27700 (esadecimale 0x6C34) | acqua (Cinese) | 6C34 | 水 |
119070 (esadecimale 0x1D11E) | chiave di Sol | D834 DD1E | 𝄞 |
"水, z, 𝄞" (acqua, z, chiave di Sol), codificati in UTF-16 | ||
---|---|---|
tipo di codifica | ordine dei byte | sequenza dei byte in memoria |
UTF-16LE | little endian | 34 6C, 7A 00, 34 D8 1E DD |
UTF-16BE | big endian | 6C 34, 00 7A, D8 34 DD 1E |
UTF-16 | little endian, con BOM | FF FE, 34 6C, 7A 00, 34 D8 1E DD |
UTF-16 | big endian, con BOM | FE FF, 6C 34, 00 7A, D8 34 DD 1E |
* Per visualizzare correttamente i caratteri sono necessari font e software compatibili Unicode.
Procedura di codifica UTF-16
Supponiamo di voler codificare il carattere U+64321 (esadecimale 0x64321). Essendo superiore a 0xFFFF deve essere rappresentato con una coppia surrogata, in questo modo:
v = 0x64321 v′ = v - 0x10000 = 0x54321 = 0101 0100 0011 0010 0001
vh = 0101010000 // 10 bit alti di v′ vl = 1100100001 // 10 bit bassi di v′ w1 = 0xD800 // w1 e w2 vengono inizializzati con la prima coppia surrogata w2 = 0xDC00 w1 = w1 | vh = 1101 1000 0000 0000 | 01 0101 0000 = 1101 1001 0101 0000 = 0xD950
w2 = w2 | vl = 1101 1100 0000 0000 | 11 0010 0001 = 1101 1111 0010 0001 = 0xDF21
La rappresentazione del carattere U+64321 è quindi la seguente coppia di parole di 16 bit:
0xD950 0xDF21
Voci correlate
Altri progetti
- Wikimedia Commons contiene immagini o altri file su UTF-16
Collegamenti esterni
- Unicode Technical Note #12: UTF-16 for Processing, su unicode.org.
wikipedia, wiki, libro, libri, biblioteca, articolo, lettura, download, scarica, gratuito, download gratuito, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, immagine, musica, canzone, film, libro, gioco, giochi, mobile, telefono, Android, iOS, Apple, cellulare, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, Web, computer