Conversion Unicode à ASCII sous linux [C++] - C++ - Programmation
Marsh Posté le 30-11-2009 à 18:04:29
Salut,
En c++, linux comme windows, j'utiliserais std::string et std::wstring (de mémoire). J'imagine qu'il y a un moyen de passer de l'une à l'autre.
char * c'est du C.
Marsh Posté le 01-12-2009 à 09:16:05
Merci de m'avoir répondu,
Je connais les classes string et wstring, et comme tu le dis il y a moyen de convertir de l'un à l'autre.
Seulement, je suis plus ou forcé d'utiliser les types wchar_t et char*, de par ce que je récupere avant ma conversion et la fonction wcstombs(...)
D'autres suggestions?
Marsh Posté le 02-12-2009 à 00:00:52
Je ne dois pas comprendre le problème parce que pour moi rien ne t'empêche de construire une wstring à partir de ton wchar_t de base, et ensuite de convertir en string. Ensuite si vraiment tu veux un char*, ben string::c_str()...
Marsh Posté le 02-12-2009 à 17:21:59
Hmmm,
Je vais résumer ce que j'ai compris que tes remarques, dis moi si je me trompe.
Pour effectuer le passage Unicode_4_octets à Ascii_1_octet, tu proposes :
_ à partir de mon wchar_t en trée que récupere un wstring,
_ que j'effectue une conversion wstring à string, avec un code tel que
Code :
|
_qu'enfin je récupere nun un char* à partir du string avec c_str() pour la suite de mes aventures!
Ai-je bien compris?
Je vais tenter ces conversions dans les jours qui viennent (je ne suis pas entièrement sur ce problème actuellement ^^)
Marsh Posté le 02-12-2009 à 20:06:19
Oui tu as bien compris mon idée.
Je ne sais pas si ton code fonctionne ou même si la méthode est bonne, je n'ai jamais eu à le faire. En tout cas ça vaut le coup d'essayer je ne vois pas pourquoi cela ne fonctionnerait pas.
Marsh Posté le 30-11-2009 à 12:26:24
Bonjour,
J'adapte actuellement un code de Windows vers Linux.
Dans ce code, il y a une conversion de texte Unicode en ASCII,
Le type utilisé pour l'Unicode est wchar_t, le texte à récupérer en ASCII sera un char*
La méthode utilisé était WideCharToMultiByte().
Après avoir cherché des équivalent pour Linux, j'ai trouvé la méthode wcstombs(...), et plus récemment wcstombs_s(...).
C'est là que mon problème survient, le wchar_t est codé sur 2 octets sous Windows, cependant il prend 4 octets sous linux.
L'idée est donc de convertir du texte Unicode, codé en 4 octets dans un wchar_t, en texte ASCII dans un char* sur 1 octets.
Par exemple, pour la ligature œ, je veut passer de 00000153 à 9C (un lien utile: la table Windows 1252).
Je n'arrive pas à m'en sortir après plusieurs de recherches :s
Aussi tous aides, conseils et remarques sont les bienvenues!
Merci d'avance.