#include <stdlib.h> // <cstdlib> en C++
int mbtowc( wchar_t * wideCharPtr, const char * multiBytesPtr, size_t charSizeMax );
Cette fonction, dont le nom signifie « multibytes to wide characters »,
permet de transformer un caractère « multibytes » (stocké sur un ou plusieurs octets) en un caractère « wide characters »
(de type wchar_t
).
wideCharPtr : un pointeur sur la zone de destination dans laquelle stocker le caractère de type wchar_t *
,
certainement associée à un encodage UTF-16.
multiBytesPtr : un pointeur sur le caractère d'origine, certainement associée à un encodage UTF-8.
charSizeMax : la taille maximale d'un caractère, en fonction de l'encodage associé à la localisation courante
(la localisation se contrôle via la fonction setlocale
).
La macro MB_CUR_MAX permet de facilement initaliser ce paramètre.
Si le paramètre multiBytesPtr
est non nul, la fonction renvoi -1
si la transformation ne peut être effectuée,
ou le nombre d'octets utilisé par le caractère d'origine.
Si le paramètre multiBytesPtr
est nul, la fonction renvoie une valeur non nulle si l'encodage propose des caractères de tailles
variable, ou zéro si la place occupée par un caractère quelconque est fixe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <locale.h> #include <stdio.h> #include <stdlib.h> int main() { // On se place en mode UTF-8 pour gérer des caractères multi-octets. setlocale( LC_ALL, "en_US.utf8" ); // On crée une chaîne avec des caractères multi-octets en utilisant l'encodage UTF-8. const char * str = u8"\u03c0 est un sigle mathématique."; // On affiche notre chaîne de caractères encodée en UTF-8 printf( "%s\n", str ); wchar_t wstr[2]; wstr[1] = '\0'; // zéro terminal // On transforme le premier caractère en représentation UTF-16 / wchar (wide char) if ( mbtowc( &wstr[0], str, MB_CUR_MAX ) != -1 ) { // On affiche notre chaîne de caractères encodée en UTF-16 printf( "%ls\n", wstr ); } return EXIT_SUCCESS; } |
Et voici les résultats produits par cet exemple :
$> gcc -o sample sample.c $> ./sample π est un sigle mathématique. π $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :