Se stai usando Windows / Visual Studio e devi convertire una stringa in wstring puoi usare:
#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());
Stessa procedura per convertire una stringa in stringa (a volte è necessario specificare una tabella codici ):
#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());
È possibile specificare una tabella codici e persino UTF8 (che è piuttosto carino quando si lavora con JNI / Java ). In questa risposta viene mostrato un modo standard per convertire una stringa std :: wstring in utf8 std :: stringa .
//
// 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);
}
Se vuoi saperne di più sui codici, c'è un interessante articolo su Joel on Software: il minimo assoluto che ogni sviluppatore di software deve assolutamente conoscere positivamente su Unicode e set di caratteri .
Queste macro CA2W (Converti Ansi in Wide = unicode) fanno parte delle macro di conversione stringhe ATL e MFC , inclusi gli esempi.
A volte dovrai disabilitare l'avviso di sicurezza # 4995 ', non conosco altre soluzioni alternative (a me succede quando ho compilato per WindowsXp in VS2012).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Modifica:
Beh, secondo questo articolo l'articolo di Joel sembra essere: "mentre è divertente, è abbastanza leggero sui dettagli tecnici reali". Articolo: Ciò che ogni programmatore deve assolutamente e positivamente sapere sulla codifica e sui set di caratteri per lavorare con il testo .
strings
accetta caratteri a 8 bit. È già codificato in UTF-8?