Pregunta

¿Estoy intentando mostrar texto en mi programa usando (digamos) Windows GDI y algunos de los caracteres Unicode se muestran como signos de interrogación? ¿Qué está pasando?

Vea también: ¿Qué significa? cuando mi texto se muestra como cuadros?

¿Fue útil?

Solución

En Windows hay 2 problemas comunes de visualización que ocurren cuando se intenta mostrar caracteres Unicode:

  1. El texto

    a veces aparece como signos de interrogación

    • Esto ocurre cuando los datos Unicode se convierten a una codificación de conjunto de caracteres de 8 bits (o caracteres de múltiples bytes técnicos) generalmente a través de la página de códigos del sistema (pero otras páginas de códigos pueden especificarse en las llamadas de conversión). Si el conjunto de caracteres de 8 bits de destino no incluye los caracteres necesarios, cualquier carácter que no se pueda representar en el conjunto de caracteres de destino se convierte en signos de interrogación.
  2. El texto

    a veces aparece como cuadros

    • Este es un problema con la fuente que no tiene el glpyh para un carácter en particular. Los cuadros aparecen cuando hay una falta de coincidencia entre los caracteres Unicode en el documento y los admitidos por la fuente. Específicamente, los cuadros representan caracteres no admitidos por la fuente seleccionada.

Otros consejos

Significa que su texto Unicode se está convirtiendo a texto ANSI en algún lugar. Dado que los caracteres Unicode fuera de Latin-1 no se pueden convertir a ANSI, se convierten en signos de interrogación. Asegúrese de que su programa esté compilado con soporte para Unicode (es decir, los símbolos del preprocesador UNICODE y _UNICODE están # definidos por su proyecto), de modo que siempre esté llamando a las versiones Unicode adecuadas de las diversas funciones de Windows.

Básicamente has corrompido el texto. Está tomando texto Unicode en una codificación y luego lo ha convertido en otra codificación sin verificar que la codificación de destino incluya todos los caracteres en el texto de origen. Habiendo hecho esto, tienes un montón de galimatías.

Las formas de hacer esto incluyen:

  1. Tratar el texto UTF-8 como ANSI (sin convertirlo primero en una página de códigos válida)
  2. Convertir texto Unicode en una página de códigos sin verificar si la página de códigos tiene los caracteres correctos.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top