UTF-16
UTF-16 es la forma de codificación de longitud variable de Unicode que usa 2 o 4 bytes por punto de código: los caracteres del BMP ocupan una unidad de código de 16 bits y los del plano suplementario, un par sustituto (2 unidades).
Propósito
Equilibrar la eficiencia espacial con la cobertura completa de Unicode donde dominan los caracteres del BMP, como en la API de Windows y la representación interna de cadenas de Java.
Mecanismo
Un punto de código del BMP (U+0000-FFFF) se almacena directamente como una unidad de 16 bits. A un punto suplementario (U+10000-10FFFF) se le resta 0x10000 y se divide en mitades de 10 bits alta y baja, desplazadas por 0xD800 y 0xDC00, formando un par sustituto. El orden de bytes lo indica el BOM (U+FEFF).
Casos de uso
- Cadenas internas de la API de Windows
- Representación interna de cadenas de Java/JavaScript
- Almacenamiento interno de String en .NET
- Almacenamiento de nombres de archivo (NTFS)
Ejemplos
- entrada
AOutput0x00 0x41UTF-16BE, 2 bytes
- entrada
😀Output0xD8 0x3D 0xDE 0x00A surrogate pair, 4 bytes
Errores comunes
- Ignoring surrogate pairs, producing wrong character counts
- Use code-point-aware APIs or surrogate-pair-aware iteration