UTF-32
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]- 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
- (en) « HTML Standard », sur html.spec.whatwg.org (consulté le )
- « Choisir et appliquer un encodage de caractères », sur www.w3.org (consulté le )
- (en) « PEP 393 -- Flexible String Representation », sur legacy.python.org (consulté le )
Voir aussi
[modifier | modifier le code]- Demi-zone haute d’indirection
- Demi-zone basse d’indirection
- Arabe – formes de présentation – A (2e partie)
- Caractères spéciaux
- Fins de plans supplémentaires : plan multilingue complémentaire, plan idéographique complémentaire, plan 3, plan 4, plan 5, plan 6, plan 7, plan 8, plan 9, plan 10, plan 11, plan 12, plan 13, plan complémentaire spécialisé, zone supplémentaire A à usage privé, zone supplémentaire B à usage privé
Liens internes
Liens externes
[modifier | modifier le code]- (en) chap. 3 « Conformance », dans The Unicode Standard : Version 6.0.0, Mountain View, CA, US, The Unicode Consortium, (ISBN 978-1-936213-01-6, présentation en ligne, lire en ligne), p. 88-100.