Se você estiver usando o Windows / Visual Studio e precisar converter uma string em wstring, poderá usar:
#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());
O mesmo procedimento para converter uma string para string (às vezes você precisará especificar uma página de código ):
#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());
Você pode especificar uma página de código e até UTF8 (isso é muito bom ao trabalhar com JNI / Java ). Uma maneira padrão de converter um std :: wstring em utf8 std :: string é mostrada nesta resposta .
//
// 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 você quiser saber mais sobre páginas de código, há um artigo interessante sobre Joel no Software: O Mínimo Absoluto Todo desenvolvedor de software deve saber absolutamente, positivamente, positivamente sobre Unicode e conjuntos de caracteres .
Essas macros CA2W (Converter ANSI para Wide = unicode) fazem parte das macros de conversão de string ATL e MFC , incluindo exemplos.
Às vezes, você precisará desativar o aviso de segurança # 4995 ', não conheço outra solução alternativa (isso acontece quando eu compilei o WindowsXp no VS2012).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Edit:
Bem, de acordo com este artigo, o artigo de Joel parece ser: "embora divertido, é bastante claro sobre detalhes técnicos reais". Artigo: O que todo programador precisa absolutamente e positivamente de saber sobre codificação e conjuntos de caracteres para trabalhar com texto .
strings
aceite caracteres de 8 bits. Já está codificado em UTF-8?