c++ - No se puede convertir el CStringW en CStringA
cstring access (1)
CStringW
almacena CStringW
Unicode UTF-16 .
¿Qué codificación esperas para tu CStringA
?
¿Quieres UTF-8 ?
En este caso, puedes hacer:
// strUtf16 is a CStringW.
// Convert from UTF-16 to UTF-8
CStringA strUtf8 = CW2A(strUtf16, CP_UTF8);
Hablar de CStringA
sin especificar una codificación no tiene sentido.
El segundo parámetro de CW2A
es lo que se transfiere a WideCharToMultiByte()
Win32 API como CodePage
(tenga en cuenta que CW2A
es esencialmente un contenedor conveniente de C ++ RAII alrededor de esta API). Si sigue esta documentación de API, puede encontrar varios valores de "página de códigos" (es decir, codificaciones).
Esta pregunta ya tiene una respuesta aquí:
- WideCharToMultiByte () vs. wcstombs () 5 respuestas
Estoy trabajando en un proyecto donde he abordado un problema de convertir CStringW
a CStringA
para cadenas de varios bytes como el japonés.
Estoy cargando la cadena de recursos de cadena utilizando el LoadString()
. He intentado seguir el código pero parece que no funciona.
CStringW csTest;
csTest.LoadString(JAPANESE_STRING);
CStringA Msg = CStringA(csTest); // Msg has been returned blank string
Y
std::string Msg = CW2A(csTest);// Msg has been returned blank string
También probé wcstombs()
también.
¿Alguien puede decirme cómo puedo convertir CStringW
a CString
? Gracias por adelantado.