Aller au contenu

UTF-32

Un article de Wikipédia, l'encyclopédie libre.

UTF-32, quelquefois appelé UCS-4, est un codage des caractères défini par Unicode où chaque caractère est codé sur un mot de 32 bits.

Le codage était défini dans l’annexe 19 à la norme Unicode. Depuis, l’annexe est devenue obsolète, car UTF-32 fait partie intégrante de la norme Unicode, dans son chapitre 3 Conformance où elle est définie de façon très stricte.

Un avantage de la largeur fixe est qu’il est plus facile de calculer la longueur d’une chaîne de caractères contrairement à l’UTF-8 et l’UTF-16, où les deux sont des codages à largeur variable. Un autre avantage est qu’il est plus facile de trouver le nième caractère d’une chaîne, où le nième caractère est la longueur de la chaîne divisée par 4.

L’inconvénient le plus significatif est que les caractères les plus utilisés utilisent 4 octets. Par exemple, le caractère @ est représenté comme 00 00 00 40 en UTF-32.[1] En UTF-16, ce caractère est codé comme ceci : 00 40. En UTF-8, il est codé comme ceci : 40. Les 11 bits les plus significatifs sont toujours zéros. L’UTF-32 peut-être jusqu’à 2 fois plus grand qu’UTF-16 et jusqu’à 4 fois plus grand que l’UTF-8 (le codage le plus commun).

Utilisation

[modifier | modifier le code]

En général, ce codage est rarement utilisé à cause de son gaspillage d’espace et son interdiction comme un codage dans les documents HTML.[2],[3]

En C++2011, il existe 2 types de données qui utilisent l’UTF-32. Un caractère est stocké comme char32_t . Une chaîne UTF-32 est stockée comme u32string. Les deux types sont identifiés par le préfixe U avant le caractère ou la chaîne. Voici un exemple :

#include <string>

char32_t caractère_UTF32 = U'🔟'; // aussi écrit comme U'\U0001F51F'
std::u32string chaîne_UTF32 = U"Chaîne de caractères UTF–32"; // définie comme `const char32_t*´

En Python, depuis la version 3.3, une chaîne est stockée en UTF-32 si elle contient au moins 1 caractère dont le point de code est supérieur ou égal à U+10000[4] En plus, cela signifie qu’un caractère non-PMB n’est pas égal à son pair de demi-codets ("\U0001F51F" != "\ud83d\udd1f").

Références

[modifier | modifier le code]
  1. Cet exemple utilise UTF-32 BE (UTF-32 gros-boutiste). Le même caractère en UTF-32 LE (petit-boutiste): 40 00 00 00
  2. (en) « HTML Standard », sur html.spec.whatwg.org (consulté le )
  3. « Choisir et appliquer un encodage de caractères », sur www.w3.org (consulté le )
  4. (en) « PEP 393 -- Flexible String Representation », sur legacy.python.org (consulté le )

Liens internes

Liens externes

[modifier | modifier le code]