Es-tu sûr de ce que tu racontes
?
Parce que:
1) l'UTF-8 c'est entre 1 et 4 octets par caractère. Il est compatible ASCII.
Lis la page Wikipédia: le premier octet contient la taille. Et donc oui, l'UTF-8 est très difficile à découper caractère par caractère parce qu'il faut lire la chaîne en même temps.
Mais 1
char* suffit, mais sa taille mémoire est différente de son nombre de caractères (sauf ASCII)
2) l'UTF-16 c'est 2 octets par caractère. En C, tu as le nouveau type
wchar_t et tout 1 pan de la bibliothèque standard a été refaite pour supporter l'UTF-16.
Le problème, c'est 1 caractère peut-être soit 1 caractère (2 octets) soit 2 caractères (4 octet). Ce sont les "
surrogate pairs"
Par exemple, c'est soit 'é' (e accent grave) soit 'e' + '\'' (e + l'accent grave).
C'est pour cette raison que
wchar_t c'est soit 2 octets sous Windows soit 4 octets sous Linux/ OS X.
Mais le découpage caractère est simple (
wchar_t par
wchar_t, je pense éventuellement 2 octets par 2 octets). Par contre sa taille mémoire peut être différente de son nombre de caractères
3) l'UTF-32. Là pas de problème, 1 caractère c'est 4 octets. La taille mémoire d'1 chaîne de caractères est par contre assez conséquente.
4) Et pour les dinosaures, tu as aussi les "
code pages" (ANSI, Latin-1, Shift-JIS, OEM (console Windows),…) : MBCS ("Multi-Byte Character Set") ici c'est 1 octet sauf les "
code pages" étendus sur 2 octets.
Partager