"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo imprimir correctamente caracteres UTF-8 en la consola de Windows con caracteres alemanes?

¿Cómo imprimir correctamente caracteres UTF-8 en la consola de Windows con caracteres alemanes?

Publicado el 2024-11-09
Navegar:565

How to Print UTF-8 Character Correctly in Windows Console with German Characters?

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:

  1. Usar WriteConsoleW directamente: Comunicarse explícitamente con la API de la consola utilizando WriteConsoleW. Este enfoque garantiza que los datos se escriban correctamente en la consola. Sin embargo, es necesario distinguir entre situaciones de salida de consola y no consola.
  2. Configuración del modo de salida: Establezca el modo de salida de los descriptores de archivos de salida estándar en "_O_U16TEXT" o "_O_U8TEXT" a través de _setmode. Esto permite que las funciones de salida de caracteres anchos envíen datos Unicode correctamente a la consola. Tenga en cuenta que este método requiere el uso únicamente de funciones de caracteres anchos en la secuencia seleccionada.
  3. Codificación CP_UTF8: Imprima texto UTF-8 directamente en la consola configurando la página de códigos de salida de la consola en CP_UTF8 y usando el código apropiado funciones de bajo nivel o una implementación personalizada de ostream.

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.

Último tutorial Más>

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