Principe de l'extension
UTF-8000 se présente comme une évolution de l’encodage UTF-8, en conservant les deux propriétés fondamentales de ce dernier : ASCII ⊆ UTF-8 ⊆ UTF-8000. Le projet ne crée aucun cas spécial ; les règles de décodage de l’UTF-8 restent valides, à l’exception de la prise en charge de séquences de plus de quatre octets. Ainsi, un point de code peut être représenté par un code unit de longueur arbitraire, ce qui élimine la limitation de 0x10FFFF imposée par le standard Unicode actuel.
pipx install UTF-8000Mécanique des octets de démarrage
Chaque octet de UTF-8000 possède un préfixe de synchronisation situé dans les bits les plus significatifs. Un préfixe 0 indique un octet ASCII (premier octet d’une séquence de longueur 1). Un préfixe 11 désigne le premier octet d’une séquence multi‑octets, tandis que 10 identifie les octets de continuation. Le texte précise que les nibbles supérieurs des octets ASCII sont limités à 0‑7, et ceux des octets de continuation à 8‑B, ce qui découle directement du préfixe binaire.
Les bits de démarrage (start bits) forment une séquence 111…10 de longueur n‑1 pour une séquence de n octets. Concrètement, pour un code unit de 22 octets, on trouve 20 bits de valeur 1 suivis d’un 0, puis les bits de contenu répartis sur les octets suivants. Cette construction garantit que la longueur de la séquence est décodable sans ambiguïté.
Synchronisation et récupération d’erreurs
Le préfixe de synchronisation rend l’encodage self‑synchronizing : en lisant un octet isolé, on sait immédiatement s’il s’agit d’un premier octet ou d’une continuation. Cette propriété, héritée de l’UTF‑8, permet de reprendre le décodage après un saut aléatoire dans le flux ou après la détection d’un octet invalide (ex. 0xC0). Le processus consiste à émettre le caractère de remplacement U+FFFD et à attendre le prochain octet avec préfixe 0 ou 11, ignorant les octets intermédiaires.
Limites et implications pratiques
Deux cas spéciaux subsistent : le traitement des octets ASCII, qui reste inchangé, et la vérification d’overlong pour les séquences de deux octets, où l’on impose quatre bits de contenu obligatoires au lieu de cinq pour les séquences plus longues. Au‑delà de ces exigences, chaque code unit supplémentaire augmente linéairement la taille du texte, ce qui peut impacter la bande passante et le stockage lorsqu’on encode des points de code très élevés. De plus, aucune implémentation standard ne supporte actuellement UTF‑8000, ce qui limite son adoption à des environnements expérimentaux.