#include <stdlib.h> // <cstdlib> en C++
int wctomb( char * multiBytesPtr, const char * wideChar );
Cette fonction, dont le nom signifie « wide characters to multibytes »,
permet de transformer un caractère « wide characters » (de type wchar_t
) en un caractère « multibytes » (stocké sur un ou plusieurs octets).
multiBytesPtr : un pointeur sur la zone de destination dans laquelle stocker le caractère multi-octets, certainement associée à un encodage UTF-8.
wideChar : le caractère d'origine de type wchar_t
, certainement associée à un encodage UTF-16.
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 multibytes produit.
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 27 28 29 30 |
#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <wchar.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 de type "wide char" en utilisant l'encodage UTF-16. const wchar_t * wstr = L"\u03c0 est un sigle mathématique."; // On affiche notre chaîne de caractères encodée en UTF-16 printf( "%ls\n", wstr ); // On transforme le premier caractère en représentation UTF-8 multibytes. char buffer[ MB_CUR_MAX + 1 ]; // +1 => le zéro terminal int charSize = wctomb( &buffer[0], wstr[0] ); printf( "charSize == %d\n", charSize ); // A t'on réussit la transformation ? if ( charSize != -1 ) { buffer[charSize] = '\0'; // On affiche notre chaîne de caractères encodée en UTF-16 printf( "%s\n", buffer ); } return EXIT_SUCCESS; } |
Et voici les résultats produits par cet exemple :
$> gcc -o sample sample.c $> ./sample π est un sigle mathématique. charSize == 2 π $>
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 :