convertir unicode en char

Comment convertir une chaîne Unicode en char* ou char* const dans embarcadero c ++?

“Chaîne Unicode” n’est pas assez spécifique pour connaître la nature de vos données source, mais vous voulez probablement dire “chaîne UTF-16 stockée dans un tableau wchar_t”, car c’est ce que la plupart des gens qui ne connaissent pas la terminologie appropriée utilisent.

“char *” ne suffit pas non plus pour savoir ce que vous voulez cibler, bien que “embarcadero” ait peut-être une convention. Je suppose que vous voulez des données UTF-8, sauf indication contraire de votre part.

Aussi, je limiterai mon exemple à ce qui fonctionne dans VS2010

 // your "Unicode" ssortingng wchar_t const * utf16_ssortingng = L"Hello, World!"; // #include  std::wssortingng_convert,wchar_t> convert; std::ssortingng utf8_ssortingng = convert.to_bytes(utf16_ssortingng); 

Cela suppose que les chaînes wchar_t sont au format UTF-16, comme c’est le cas sous Windows, mais qu’il s’agit sinon d’un code portable.

 Ssortingng text = "Hello world"; char *txt = AnsiSsortingng(text).c_str(); Older text.t_str() is now AnsiSsortingng(Ssortingng).c_str() 

Vous pouvez réinterpréter n’importe quel tableau comme un tableau de pointeurs de caractère légalement. Donc, si vos données Unicode sont en unités de code à 4 octets comme

 char32_t data[100]; 

alors vous pouvez y accéder sous forme de tableau de caractères:

 char const * p = reinterpret_cast(data); for (std::size_t i = 0; i != sizeof data; ++i) { std::printf("Byte %03zu is 0x%02X.\n", i, p[i]); } 

De cette façon, vous pouvez examiner les octets individuels de vos données Unicode un à un.

(Cela n’a bien sûr rien à voir avec la conversion de l’encodage de votre texte. Pour cela, utilisez une bibliothèque comme iconv ou ICU.)

Si vous travaillez avec Windows:

 //#include  u16ssortingng utext = u"объява"; char text[0x100]; WideCharToMultiByte(CP_UTF8,NULL,(const wchar_t*)(utext.c_str()),-1,text,-1,NULL,NULL); cout << text; 

Nous ne pouvons pas utiliser std :: wssortingng_convert, car n'est pas disponible dans MinGW 4.9.2.