Salut à tous.
Comment fait-on pour convertir un string en wstring (ou un char* en wchar_t*) et inversément? Quitte à perdre des informations si c'est unicode vers ASCII.
Merci d'avance.
Salut à tous.
Comment fait-on pour convertir un string en wstring (ou un char* en wchar_t*) et inversément? Quitte à perdre des informations si c'est unicode vers ASCII.
Merci d'avance.
Quelqu'un avait donné ce code (je ne retrouve plus le post) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <string> #include <locale> std::string narrow(const std::wstring& ws) { std::string res(ws); std::locale loc("english"); std::use_facet< std::ctype<wchar_t> >(loc).narrow(&ws[0], &ws[ws.length()], '?', &res[0]); return res; } std::wstring widen(const std::string& s) { std::wstring res(s); std::locale loc("english"); std::use_facet< std::ctype<wchar_t> >(loc).widen(&s[0], &s[s.length()], &res[0]); return res; }
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Si c'est juste de l'ASCII il suffit de copier les données.
Après si tu dis ASCII alors que c'est pas de l'ASCII mais un truc genre ISO-8859-1 c'est autre chose, bien entendu.
Sauf que tu as choisi pile le mauvais exemple, car pour l'ISO-8859-1, il suffit de recopier aussi (en non-signé, car l'octet fort doit être nul).![]()
En effet, les 256 premiers caractères unicode sont ceux de l'ISO-8859-1...
Enfin bien sûr, seules les vraies fonctions de conversion sont à utiliser (je viens de décrouvrir narrow/widen, mais on peut aussi utiliser les streams (mais j'ignore quelle locale est prise en compte)).Envoyé par [url=http://en.wikipedia.org/wiki/Basic_multilingual_plane]Wikipédia[/url]
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Bon, pour clarifier: je parlais des classes "string" et "wstring". Et ce quelque puissent être leurs formats d'encodage respectifs, quelle que soit la plateforme.
Ben comme on l'a dit, tu peux utiliser soit widen() et narrow(), soit les stringstreams...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Ha oui, j'avais poster ces fonctions il y a quelques temps...Quelqu'un avait donné ce code (je ne retrouve plus le post) :
Est-il envisageable des les ajouter dans la FAQ ? C'est assez recurent comme question je trouve![]()
C'est déjà depuis un bout de temps dans la pile de questions à ajouter pour la prochaine MAJEnvoyé par superspag
![]()
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Partager