Si vous utilisez Windows / Visual Studio et devez convertir une chaîne en wstring, vous pouvez 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 convertir une chaîne wstring en chaîne (parfois vous devrez spécifier une page de code ):
#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 code et même UTF8 (c'est assez agréable lorsque vous travaillez avec JNI / Java ). Un moyen standard de convertir un std :: wstring en utf8 std :: string est montré dans cette réponse .
//
// using ATL
CA2W ca2w(str, CP_UTF8);
//
// or the standard way taken from the answer above
#include <codecvt>
#include <string>
// convert UTF-8 string to wstring
std::wstring utf8_to_wstring (const std::string& str) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return myconv.from_bytes(str);
}
// convert wstring to UTF-8 string
std::string wstring_to_utf8 (const std::wstring& str) {
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return myconv.to_bytes(str);
}
Si vous voulez en savoir plus sur les pages de codes, il y a un article intéressant sur Joel sur le logiciel: le minimum absolu que chaque développeur de logiciel doit absolument, positivement savoir sur Unicode et les jeux de caractères .
Ces macros CA2W (Convert Ansi to Wide = unicode) font partie des macros de conversion de chaîne ATL et MFC , exemples inclus.
Parfois, vous devrez désactiver l'avertissement de sécurité # 4995 ', je ne connais pas d'autre solution de contournement (pour moi, cela se produit 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:
Eh bien, selon cet article, l'article de Joel semble être: "tout en étant divertissant, il est assez léger sur les détails techniques réels". Article: Ce que tout programmeur doit absolument savoir sur le codage et les jeux de caractères pour travailler avec du texte .
strings
accepte les caractères> 8 bits. Est-il déjà encodé en UTF-8?