string s = "おはよう";
wstring ws = FUNCTION(s, ws);
Comment pourrais-je assigner le contenu de s à ws?
Recherche Google et utilisé certaines techniques, mais ils ne peuvent pas attribuer le contenu exact. Le contenu est déformé.
string s = "おはよう";
wstring ws = FUNCTION(s, ws);
Comment pourrais-je assigner le contenu de s à ws?
Recherche Google et utilisé certaines techniques, mais ils ne peuvent pas attribuer le contenu exact. Le contenu est déformé.
En supposant que la chaîne d'entrée soit une codage UTF-8 (qui, à mon sens, j'en doute fort :-)) d'une représentation d'une chaîne de votre intérêt, vous pouvez pleinement réaliser cela avec la bibliothèque standard seule:
#include <locale>
#include <codecvt>
#include <string>
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string narrow = converter.to_bytes(L"foo");
std::wstring wide = converter.from_bytes("bar");
La raison de mon hypothèse UTF-8 est que ce n'est clairement pas ASCII, ANSI ou similaire.
Votre question est sous-spécifiée. Strictement, cet exemple est une erreur de syntaxe. Cependant, mbstowcs
est probablement ce que vous recherchez.
C'est une fonction C et fonctionne sur les tampons, vous aurez donc besoin de
wchar_t buf[] = new wchar_t[ s.size() ];
size_t num_chars = mbstowcs( buf, s.c_str(), s.size() );
wstring ws( buf, num_chars );
delete[] buf;
EDIT: Mooing Duck suggère cet idiome:
std::wstring ws(s.size(), L' '); // Overestimate number of code points.
ws.resize(mbstowcs(&ws[0], s.c_str(), s.size())); // Shrink to fit.
Si vous utilisez Windows/Visual Studio et la nécessité de convertir une chaîne de caractères à wstring vous devez utiliser:
#include <AtlBase.h>
#include <atlconv.h>
...
string s = "some string";
CA2W ca2w(s.c_str());
wstring w = ca2w;
printf("%s = %ls", s.c_str(), w.c_str());
Même procédure pour la conversion d'un wstring à chaîne (parfois, vous devez spécifier une page de codes):
#include <AtlBase.h>
#include <atlconv.h>
...
wstring w = L"some wstring";
CW2A cw2a(w.c_str());
string s = cw2a;
printf("%s = %ls", s.c_str(), w.c_str());
Vous pouvez spécifier une page de codes et même UTF8 (c'est assez agréable quand on travaille avec JNI/Java).
CA2W ca2w(str, CP_UTF8);
Si vous voulez en savoir plus sur les codes il y a un article intéressant sur Joel on Software: Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères.
Ces CA2W (Convertir Ansi de Large=unicode) macros font partie de l' ATL et MFC Chaîne de Conversion les Macros, les échantillons inclus.
Parfois, vous devrez désactiver l'avertissement de sécurité #4995", je ne sais pas d'autre solution (pour moi, il se passera lorsque j'ai compilé pour WindowsXp dans VS2012).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Edit: Ainsi, selon [cet article][3] l'article de Joel semble être: "tout en s'amusant, c'est assez léger sur les réels détails techniques". Article: [Ce Que Chaque Programmeur Absolument Besoin De Savoir À Propos De L'Encodage Et De Jeux De Caractères Pour Travailler Avec Du Texte][3].
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.