# UTF-16

UTF-16 és una forma de codificació de caràcters UCS i Unicode utilitzant símbols de longitud variable. Es troba oficialment definit en l'annex C de la norma ISO/IEC 10646:2003. També està descrita en l'estàndard Unicode (versió 3.0 o superior). És l'abreviara d'Unicode Transformation Format de 16-plans o més exactament, «UCS Transformation Format for 16 Plans of Group 00» segons la norma internacional ISO/IEC 10646.
Te les característiques principals següents:
* És capaç de representar qualsevol caràcter Unicode.
* Utilitza símbols de longitud variable: 1 o 2 paraules de 16 bits per caràcter Unicode (2 o 4 bytes). La unitat d'informació és la paraula de 16 bits.
* Està optimitzat per a representar caràcters al pla bàsic multilingüe o BMP, caràcters en el rang U+0000 a O+FFFF. El BMP conté la gran majoria de caràcters i sistemes d'escriptura en ús en l'actualitat. Quan es limita al pla bàsic multilingüe, UTF-16 pot ser considerat una forma de codificació amb símbols de mida fixa (16 bits).
* No superposició: Els símbols d'una paraula (16 bits) utilitzen un subconjunt de valors que no es pot utilitzar en símbols de 2 paraules (32 bits).

## Història

UTF-16 és l'evolució de UCS-2, present en l'estàndard Unicode fins a la versió 1.1. En UCS-2 cada punt de codi es representa pel seu valor, el que limitava el seu ús a pla bàsic multilingüe . En la versió 2.0 de l'Estàndard Unicode, la decisió d'ampliar l'espai de codis per sobre del codi FFFF va suposar la necessitat d'incloure un nou format que donés suport als nous plans, 15 i 16, d'ús privat. No obstant això, l'estàndard no va definir encara cap punt de codi fent ús d'aquest mecanisme fins a la versió 3.1.

## Descripció

En UTF-16 cada punt de codi entre 0 i FFFF es codifica, sense canvis, utilitzant 16 bits. Aquest rang es correspon amb el pla bàsic multilingüe d'Unicode, de manera que la gran majoria dels caràcters d'ús comú es codifiquen amb 16 bits.
Els caràcters dels plans addicionals, es codifiquen mitjançant 32 bits. La codificació no es fa de forma directa, és a dir, el codi final no és el valor del punt de codi. UTF-16 defineix un format de transformació per a aquests casos denominat parells subrogats .
A l'hora de valorar l'espai d'emmagatzematge requerit per un text utilitzant aquesta codificació, pot assumir que els caràcters no inclosos en el pla bàsic són molt poc freqüents i, per tant, cada caràcter utilitzarà 16 bits. Aquesta afirmació és vàlida també per al cas de les escriptures CJK (xinès, japonès i coreà).

### Parells subrogats

Unicode i ISO/IEC han limitat l'espai assignable als codis fins a 10FFFF, per la qual cosa cal un màxim de 21 bits per a la representació de qualsevol caràcter. Si s'utilitzen dues paraules per representar codis per sobre de FFFF, es té un excés de bits. Aprofitant aquesta circumstància, es va dissenyar el sistema de parells subrogats per representar caràcters fora del pla bàsic.
Es defineix un parell subrogat com dues paraules de 16 bits on:
* La primera paraula de 16 bits s'anomena subrogat alt o subrogat inicial en terminologia Unicode o elements RC de la zona mitjana-alta en terminologia ISO/IEC. Prenen valors en el rang [D800, DBFF].
* La segona paraula de 16 bits s'anomena subrogat baix o subrogat final en terminologia Unicode o elements RC de la zona mitjana-baixa en terminologia ISO/IEC. Prenen valors en el rang [DC00, DFFF].
* Es compleix el principi de no superposició, els conjunts valors de subrogats alts, baixos i codis no subrogats són completament disjunts.
Per poder complir el principi de no superposició, el conjunt de valors utilitzats com parells subrogats ha estat estandarditzat i reservat, i per això no pot ser utilitzat per a altres fins.
El sistema de parells subrogats es va afegir en la versió 2.0 d'Unicode, ISO 10646: xxxx, i pel seu disseny minimitza els conflictes que es poguessin presentar amb implementacions anteriors que no facin ús.

### Errors de codificació

Les normes de codificació estableixen, per tant, límits a les cadenes que es poden formar. Segons la norma, un intèrpret de cadenes ha de rebutjar com invàlides, i no tractar d'interpretar, les cadenes mal formades.
* Codi subrogat inicial sempre ha d'anar seguit d'un codi subrogat final.
* Codi subrogat final sempre ha d'anar precedit per un codi subrogat inicial.
* No s'admet la codificació de caràcters invàlids. Els codis FFFE, FFFF i els valors de FDD0 a FDEF, no són caràcters reals i no han de codificar en UTF-16. Tampoc s'admeten els valors reservats fora del pla bàsic.

### Esquemes de codificació i BOM

A partir del format de transformació UTF-16 es defineixen 3 esquemes de codificació. Tot i que comparteixen noms, no s'ha de confondre esquemes i formes de codificació. Els esquemes de codificació tracten de la forma en què se serialitza, escindits la informació codificada. La seguretat en els intercanvis d'informació entre sistemes heterogenis requereix la implementació de sistemes que permetin determinar l'ordre correcte dels bits i bytes i garantir que la reconstrucció de la informació és correcta. Una diferència fonamental entre processadors és l'ordre de disposició dels bytes en paraules de 16 i 32 bits, el que s'anomena endianness. Els esquemes de codificació han de garantir que els extrems d'una comunicació saben com interpretar la informació rebuda.
| Esquema de codificació | Ordre dels bytes | Admet BOM |
| UTF-16 | Big-endian o Little-endian | Sí |
| UTF-16BE | Big-endian | No |
| UTF-16LE | Little-endian | No |
Unicode defineix una marca especial, Byte order mark o BOM, a l'inici d'un fitxer o una comunicació per fer explícita l'ordenació de bytes. Aquesta marca és el caràcter amb punt de codi U+FEFF. Quan es troba en una posició inicial, pot ser interpretat com a BOM depenent del context de la comunicació. En qualsevol altra posició manté la seva semàntica original com caràcter ZERO WIDTH NON-BREAKING SPACE. Quan un protocol superior especifica l'ordre de bytes, la marca no és necessària i pot ometre donant lloc als esquemes de la llista anterior amb sufix BE o LI. En el cas de l'esquema UTF-16, que admet BOM, si aquest no s'especifica s'assumeix que l'ordenació de bytes és big-endian.

## Vegeu també

* Unicode
* UTF-7
* UTF-8
* UTF-32

## Referències

* ↑ Es pot trobar al RFC 2781 de la IETF
* ↑ «ISO/IEC 10646» (en anglès). International Organization for Standardization. [Consulta: 2 febrer 2021].
* ↑ Aliprand, Joan; et alii. «Appendix D. Changes from Unicode Version 2.0». A: The Unicode Consortium. The Unicode Standard. Version 3.0 standard (en anglès). Addisson-Wesley, gener de 2000. ISBN 0-201-61633-5 [Consulta: 13 novembre 2010]. Arxivat 2008-11-17 a Wayback Machine.
* ↑ The Unicode Consortium. «Appendix D. Changes from previous versions». A: Julie D. Allen, Joe Becker (et al.). Unicode 5.0 standard (en anglès). Addisson-Wesley, octubre de 2006. ISBN 0-321-48091-0.
* ↑ The Unicode Consortium. «2.5 Encoding Forms». A: Julie D. Allen, Joe Becker (et al.). Unicode 5.0 standard (en anglès). Addisson-Wesley, octubre de 2006. ISBN 0-321-48091-0.