Não é possível converter CStringW em CStringA [duplicado]
Pergunta
Estou trabalhando em um projeto em que me deparei com um problema de conversão CStringW
para CStringA
para string multibyte como o idioma japonês.
Estou carregando a string de recursos de string usando LoadString()
Método.Eu tentei seguir o código, mas parece não funcionar.
CStringW csTest;
csTest.LoadString(JAPANESE_STRING);
CStringA Msg = CStringA(csTest); // Msg has been returned blank string
E
std::string Msg = CW2A(csTest);// Msg has been returned blank string
Eu também tenteiwcstombs()
também.
Alguém pode me dizer como posso converter CStringW
para CString
?Desde já, obrigado.
Solução
CStringW
lojas Unicode UTF-16 cordas.
O que codificação você espera para o seu CStringA
?
Você quer UTF-8?
Neste caso, você pode fazer:
// strUtf16 is a CStringW.
// Convert from UTF-16 to UTF-8
CStringA strUtf8 = CW2A(strUtf16, CP_UTF8);
Falando sobre CStringA
sem especificar uma codificação não faz sentido.
O segundo parâmetro de CW2A
é o que é passado para WideCharToMultiByte()
API Win32 como CodePage
(Observe que CW2A
é essencialmente um wrapper C++ RAII seguro e conveniente em torno desta API).Se você seguir esta documentação da API, poderá encontrar diversos "página de código" valores (ou seja,codificações).