Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1024 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Conversion Unicode à ASCII sous linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Conversion Unicode à ASCII sous linux

n°1945839
Akash31
Posté le 30-11-2009 à 12:26:24  profilanswer
 

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.

mood
Publicité
Posté le 30-11-2009 à 12:26:24  profilanswer
 

n°1946030
ptitchep
Posté le 30-11-2009 à 18:04:29  profilanswer
 

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
n°1946151
Akash31
Posté le 01-12-2009 à 09:16:05  profilanswer
 

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?

n°1946469
ptitchep
Posté le 02-12-2009 à 00:00:52  profilanswer
 

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
n°1946705
Akash31
Posté le 02-12-2009 à 17:21:59  profilanswer
 

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

n°1946732
ptitchep
Posté le 02-12-2009 à 20:06:19  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Conversion Unicode à ASCII sous linux

 

Sujets relatifs
[Objective-C] Application de chat pour iphone / socketAccès multiples à un fichier en C++ sous window
[C] Coder un archiver/unarchiver tarrecherche des ressources Visual C++
bzip2 dans code C[C++] classe array 1d et delete[]
[C++] Map statique dans une classeaddition de caracteres en C ...
[C] [resolu] lecture matrice alloué dynamiquement{C++} Tableau de structure
Plus de sujets relatifs à : [C++] Conversion Unicode à ASCII sous linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR