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; }
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]
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...
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
![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager