O que significa quando o meu texto é apresentado como pontos de interrogação?

StackOverflow https://stackoverflow.com/questions/217237

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando mostrar algum texto no meu programa usando (digamos) do Windows GDI e alguns dos caracteres Unicode são exibidos como pontos de interrogação? O que se passa?

Veja também: O que significa quando o meu texto é exibido como caixas?

Foi útil?

Solução

No Windows, existem 2 problemas de exibição comuns que ocorrem ao tentar exibir caracteres Unicode:

  1. texto às vezes aparece como pontos de interrogação

    • Isto ocorre quando os dados Unicode é convertido para uma codificação de caracteres de 8 bits (ou tecnicamente caracteres multi-byte) geralmente através da página de códigos do sistema (mas outras páginas de código pode ser especificado nas chamadas de conversão). Se o conjunto de caracteres alvo 8-bit não inclui os caracteres necessários, quaisquer caracteres não representáveis ??no conjunto de caracteres alvo são convertidos em pontos de interrogação.
  2. texto às vezes aparece como caixas

    • Este é um problema com a fonte não ter o glpyh para um personagem particular. Caixas aparecem quando há uma incompatibilidade entre os caracteres Unicode no documento e as apoiadas pela fonte. Especificamente, as caixas de representar caracteres não suportados pelo fonte selecionada.

Outras dicas

Isso significa que seu texto Unicode está sendo convertido para ANSI em algum texto. Desde Unicode caracteres fora do Latin-1 não pode ser convertido para ANSI, eles são convertidos em pontos de interrogação. Certifique-se de que o seu programa é compilado com suporte a Unicode em (ou seja, os símbolos de pré-processamento Unicode e _UNICODE são #defined por seu projeto), de modo que você está sempre chamando as versões adequadas Unicode das várias funções do Windows.

Basicamente você ter corrompido o texto. Você está tomando texto Unicode em uma codificação e, em seguida, converteram-lo para outra codificação sem verificar que a codificação alvo inclui todos os caracteres no texto fonte. Tendo feito isso você tem um monte de rabiscos.

maneiras de fazer isso incluem:

  1. Tratar UTF-8 texto como ANSI (sem converter em uma página de código válido primeiro)
  2. A conversão de texto Unicode em um código-página sem verificar se o código-página tem os personagens direito nele.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top