[C++] Conversion Unicode à ASCII sous linux

Conversion Unicode à ASCII sous linux [C++] - C++ - Programmation

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.

Reply

Marsh Posté le 30-11-2009 à 12:26:24   

Reply

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.


---------------
deluser --remove-home ptitchep
Reply

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?

Reply

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()...


---------------
deluser --remove-home ptitchep
Reply

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 :
  1. std::string WStringToString(const std::wstring& s)
  2.     {
  3.     std::string temp(s.length(), ' ');
  4.     std::copy(s.begin(), s.end(), temp.begin());
  5.     return temp;
  6.     }


_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 ^^)

Reply

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.


---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed