es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo usar system(“chcp 936”) en mi proyecto basado en diálogos?

El código a continuación tiene como objetivo convertir una wstring “!” a una string y mostrarla como resultado:

setlocale(LC_ALL, "Chinese_China.936");
//system("chcp 936"); 

std::wstring ws = L"!";
std::string as((ws.length()) * sizeof(wchar_t), '-');
auto rs = wcstombs((char*)as.c_str(), ws.c_str(), as.length());
as.resize(rs);
cout << rs << ":" << as << endl;

Si se ejecuta sin system("chcp 936"), la cadena convertida es “£¡” en lugar de “!”. Si se ejecuta con system("chcp 936"), el resultado es correcto en un proyecto de consola.

Pero en mi proyecto basado en diálogos, system("chcp 936") no es útil, incluso si funciona, no puedo usarlo porque aparecerá una consola.

PD: El IDE es Visual Studio 2019 y mi código fuente está almacenado en UTF-8 con firma.
El idioma de mi sistema operativo es inglés y el idioma para programas que no son Unicode es inglés (Estados Unidos).

Edit: Es interesante, incluso con la configuración regional “en-US”, “!” puede convertirse en un ASCII “!”.
Pero no entiendo de dónde obtuve “£¡” en el proyecto basado en diálogos.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para convertir wstring a string con la configuración regional china

    El problema de convertir wstring a string con la configuración regional china se puede resolver estableciendo la página de códigos correcta para la salida de la consola.

    Al ejecutar el código en un proyecto de consola, utilizando system("chcp 936") se establece la página de códigos en chino simplificado GBK, lo que imprime correctamente la cadena convertida.

    Sin embargo, al utilizar un proyecto basado en diálogos, el comando system("chcp 936") no es efectivo, ya que abre una ventana de consola.

    Para resolver este problema, puedes establecer la página de códigos directamente en tu código utilizando la función SetConsoleOutputCP, de la siguiente manera:

    SetConsoleOutputCP(936); // Establece la página de códigos en chino simplificado GBK
    

    Después de establecer la página de códigos, la cadena convertida as se mostrará correctamente en la salida de la consola o del diálogo.

    También vale la pena mencionar que incluso con la configuración regional en-US, el carácter puede convertirse automáticamente en un ! ASCII.

Comments are closed.