UTF-16
UTF-16 est la forme d'encodage Unicode de longueur variable utilisant 2 ou 4 octets par point de code : les caractères du BMP occupent une unité de code de 16 bits et ceux des plans supplémentaires, une paire de substitution (2 unités).
Objectif
Équilibrer l'efficacité spatiale avec la couverture Unicode complète là où dominent les caractères du BMP, comme l'API Windows et la représentation interne des chaînes de Java.
Mécanisme
Un point de code du BMP (U+0000-FFFF) est stocké directement comme une unité de 16 bits. Pour un point supplémentaire (U+10000-10FFFF), on soustrait 0x10000 puis on scinde en deux moitiés de 10 bits, décalées de 0xD800 et 0xDC00, formant une paire de substitution. L'ordre des octets est indiqué par le BOM (U+FEFF).
Cas d’usage
- Chaînes internes de l'API Windows
- Représentation interne des chaînes Java/JavaScript
- Stockage interne des String .NET
- Stockage des noms de fichiers (NTFS)
Exemples
- entrée
AOutput0x00 0x41UTF-16BE, 2 bytes
- entrée
😀Output0xD8 0x3D 0xDE 0x00A surrogate pair, 4 bytes
Erreurs courantes
- Ignoring surrogate pairs, producing wrong character counts
- Use code-point-aware APIs or surrogate-pair-aware iteration