Si está utilizando Windows / Visual Studio y necesita convertir una cadena a wstring, puede 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());
El mismo procedimiento para convertir un wstring a cadena (a veces necesitará especificar una página de códigos ):
#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());
Puede especificar una página de códigos e incluso UTF8 (eso es bastante bueno cuando se trabaja con JNI / Java ). En esta respuesta se muestra una forma estándar de convertir un std :: wstring a utf8 std :: string .
//
// 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 desea saber más acerca de las páginas de códigos, hay un artículo interesante sobre Joel sobre software: el mínimo absoluto que todo desarrollador de software debe saber absolutamente, positivamente sobre Unicode y los conjuntos de caracteres .
Estas macros CA2W (Convertir Ansi a Wide = unicode) son parte de las macros de conversión de cadenas ATL y MFC , incluidos los ejemplos.
A veces necesitará deshabilitar la advertencia de seguridad # 4995 ', no sé de otra solución (para mí sucede cuando compilé para Windows XP en VS2012).
#pragma warning(push)
#pragma warning(disable: 4995)
#include <AtlBase.h>
#include <atlconv.h>
#pragma warning(pop)
Editar:
Bueno, de acuerdo con este artículo, el artículo de Joel parece ser: "aunque entretenido, es bastante ligero en detalles técnicos reales". Artículo: Lo que todo programador absolutamente necesita saber sobre la codificación y los juegos de caracteres para trabajar con texto .
strings
acepte caracteres de> 8 bits. ¿Ya está codificado en UTF-8?