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.