Impresión adecuada de caracteres UTF-8 en la consola de Windows
Este artículo tiene como objetivo abordar los desafíos que se enfrentan al intentar imprimir caracteres UTF-8 en la consola de Windows.
Descripción del problema
Los usuarios han encontrado dificultades para mostrar caracteres alemanes usando un código específico fragmento:
#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
A pesar de configurar la página de códigos de salida en UTF-8, los caracteres alemanes no se imprimen correctamente.
Solución
Para imprimir datos Unicode correctamente en el Consola de Windows, hay varios métodos disponibles:
Solución de problemas
En caso de error salida con el tercer método:
putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
Esto se debe a que la API de la consola interpreta los datos pasados en llamadas separadas como codificaciones ilegales cuando se usa CP_UTF8.
Para resolver esto, considere crear una subclase de streambuf que maneja con precisión la conversión de caracteres multibyte y mantiene el estado de conversión entre escrituras.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3