Null-terminated multibyte strings
Une chaîne multioctets terminée par un caractère nul (NTMBS), ou « chaîne multioctets », est une séquence d'octets non nuls suivie d'un octet de valeur zéro (le caractère nul de terminaison).
Chaque caractère stocké dans la chaîne peut occuper plus d'un octet. L'encodage utilisé pour représenter les caractères dans une chaîne de caractères multioctets est spécifique à la locale : il peut s'agir d'UTF-8, GB18030, EUC-JP, Shift-JIS, etc. Par exemple, le tableau de caractères { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } est un NTMBS contenant la chaîne "你好" en encodage multioctet UTF-8 : les trois premiers octets encodent le caractère 你, les trois octets suivants encodent le caractère 好. La même chaîne encodée en GB18030 est le tableau de caractères { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } , où chacun des deux caractères est encodé comme une séquence de deux octets.
Dans certains encodages multioctets, toute séquence de caractères multioctets donnée peut représenter différents caractères selon les séquences d'octets précédentes, connues sous le nom de "séquences de changement". De tels encodages sont dits dépendants de l'état : la connaissance de l'état de changement actuel est nécessaire pour interpréter chaque caractère. Un NTMBS n'est valide que s'il commence et se termine dans l'état de changement initial : si une séquence de changement a été utilisée, la séquence de retour correspondante doit être présente avant le caractère nul de terminaison. Des exemples de tels encodages sont BOCU-1 et SCSU .
Une chaîne de caractères multioctets est compatible en mémoire avec une chaîne d'octets terminée par un caractère nul (NTBS), c'est-à-dire qu'elle peut être stockée, copiée et examinée en utilisant les mêmes mécanismes, à l'exception du calcul du nombre de caractères. Si les paramètres régionaux corrects sont en vigueur, les fonctions d'E/S gèrent également les chaînes multioctets. Les chaînes multioctets peuvent être converties vers et depuis les chaînes larges en utilisant les fonctions de conversion dépendantes des paramètres régionaux suivantes :
Table des matières |
Fonctions
Conversions de caractères multioctets/étendus |
|
|
Défini dans l'en-tête
<stdlib.h>
|
|
|
retourne le nombre d'octets dans le prochain caractère multioctet
(fonction) |
|
|
convertit le caractère multioctet suivant en caractère large
(fonction) |
|
|
(C11)
|
convertit un caractère large en sa représentation multioctet
(fonction) |
|
(C11)
|
convertit une chaîne de caractères multioctets en chaîne large
(fonction) |
|
(C11)
|
convertit une chaîne large en chaîne de caractères multioctets étroite
(fonction) |
|
Défini dans l'en-tête
<wchar.h>
|
|
|
(C95)
|
vérifie si l'objet mbstate_t représente l'état de décalage initial
(fonction) |
|
(C95)
|
élargit un caractère étroit d'un octet en caractère large, si possible
(fonction) |
|
(C95)
|
rétrécit un caractère large en un caractère étroit sur un seul octet, si possible
(fonction) |
|
(C95)
|
retourne le nombre d'octets dans le prochain caractère multioctet, en fonction de l'état
(fonction) |
|
(C95)
|
convertit le caractère multioctet suivant en caractère large, en fonction de l'état
(fonction) |
|
(C95)
(C11)
|
convertit un caractère large en sa représentation multioctet, selon l'état
(fonction) |
|
(C95)
(C11)
|
convertit une chaîne de caractères multioctets étroite en chaîne large, avec état donné
(fonction) |
|
(C95)
(C11)
|
convertit une chaîne large en chaîne de caractères multioctets étroite, avec état donné
(fonction) |
|
Défini dans l'en-tête
<uchar.h>
|
|
|
(C23)
|
convertit un caractère multioctet étroit en encodage UTF-8
(fonction) |
|
(C23)
|
convertit une chaîne UTF-8 en encodage multioctet étroit
(fonction) |
|
(C11)
|
convertit un caractère multioctet étroit en encodage UTF-16
(fonction) |
|
(C11)
|
convertit un caractère UTF-16 en encodage multioctet étroit
(fonction) |
|
(C11)
|
convertit un caractère multioctet étroit en encodage UTF-32
(fonction) |
|
(C11)
|
convertit un caractère UTF-32 en encodage multioctet étroit
(fonction) |
Types
|
Défini dans l'en-tête
<uchar.h>
|
|
|
Défini dans l'en-tête
<wchar.h>
|
|
|
(C95)
|
informations d'état de conversion nécessaires pour itérer sur les chaînes de caractères multioctets
(classe) |
|
Défini dans l'en-tête
<uchar.h>
|
|
|
(C23)
|
type de caractère 8 bits
(typedef) |
|
(C11)
|
type de caractère 16 bits
(typedef) |
|
(C11)
|
type de caractère 32 bits
(typedef) |
Macros
|
Défini dans l'en-tête
<limits.h>
|
|
|
MB_LEN_MAX
|
nombre maximum d'octets dans un caractère multioctet, pour toute locale prise en charge
(constante macro) |
|
Défini dans l'en-tête
<stdlib.h>
|
|
|
MB_CUR_MAX
|
nombre maximum d'octets dans un caractère multioctet, dans la locale actuelle
(variable macro) |
Références
- Norme C23 (ISO/IEC 9899:2024) :
-
- 7.10 Tailles des types entiers <limits.h> (p: TBD)
-
- 7.22 Utilitaires généraux <stdlib.h> (p: TBD)
-
- 7.28 Utilitaires Unicode <uchar.h> (p: TBD)
-
- 7.29 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: TBD)
-
- 7.31.12 Utilitaires généraux <stdlib.h> (p: TBD)
-
- 7.31.16 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: TBD)
-
- K.3.6 Utilitaires généraux <stdlib.h> (p: TBD)
-
- K.3.9 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.10 Tailles des types entiers <limits.h> (p: TBD)
-
- 7.22 Utilitaires généraux <stdlib.h> (p: TBD)
-
- 7.28 Utilitaires Unicode <uchar.h> (p: TBD)
-
- 7.29 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: TBD)
-
- 7.31.12 Utilitaires généraux <stdlib.h> (p: TBD)
-
- 7.31.16 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: TBD)
-
- K.3.6 Utilitaires généraux <stdlib.h> (p: TBD)
-
- K.3.9 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: TBD)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.10 Tailles des types entiers <limits.h> (p. 222)
-
- 7.22 Utilitaires généraux <stdlib.h> (p. 340-360)
-
- 7.28 Utilitaires Unicode <uchar.h> (p. 398-401)
-
- 7.29 Utilitaires étendus pour caractères larges et multioctets <wchar.h> (p. 402-446)
-
- 7.31.12 Utilitaires généraux <stdlib.h> (p. 456)
-
- 7.31.16 Utilitaires étendus pour caractères larges et multioctets <wchar.h> (p. 456)
-
- K.3.6 Utilitaires généraux <stdlib.h> (p. 604-614)
-
- K.3.9 Utilitaires étendus pour caractères larges et multioctets <wchar.h> (p. 627-651)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.10 Tailles des types entiers <limits.h> (p: 203)
-
- 7.20 Utilitaires généraux <stdlib.h> (p: 306-324)
-
- 7.24 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: 348-392)
-
- 7.26.10 Utilitaires généraux <stdlib.h> (p: 402)
-
- 7.26.12 Utilitaires de caractères larges et multioctets étendus <wchar.h> (p: 402)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 4.1.4 Limites <float.h> et <limits.h>
-
- 4.10 UTILITAIRES GÉNÉRAUX <stdlib.h>
-
- 4.13.7 Utilitaires généraux <stdlib.h>
Voir aussi
|
Documentation C++
pour
Chaînes multioctets terminées par un caractère nul
|