Qu'est-ce que cela signifie lorsque mon texte est affiché sous forme de points d'interrogation?

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

  •  03-07-2019
  •  | 
  •  

Question

J'essaie d'afficher du texte dans mon programme en utilisant (par exemple) Windows GDI et certains caractères Unicode sont affichés sous forme de points d'interrogation? Qu'est-ce qui se passe?

Voir aussi: Qu'est-ce que cela signifie quand mon texte est affiché en tant que boîtes?

Était-ce utile?

La solution

Sous Windows, deux problèmes d'affichage courants se produisent lors de la tentative d'affichage de caractères Unicode:

  1. le texte apparaît parfois sous forme de points d'interrogation

    • Cela se produit lorsque les données Unicode sont converties en un codage de jeu de caractères de 8 bits (ou en des caractères techniques sur plusieurs octets) généralement via la page de codes du système (mais d'autres pages de codes peuvent être spécifiées dans les appels de conversion). Si le jeu de caractères cible de 8 bits n'inclut pas les caractères nécessaires, tous les caractères non représentables du jeu de caractères cible sont convertis en points d'interrogation.
  2. le texte apparaît parfois sous forme de cases

    • Ceci est un problème avec la police n'ayant pas le glpyh pour un caractère particulier. Des zones s'affichent en cas d'incompatibilité entre les caractères Unicode du document et ceux pris en charge par la police. Plus précisément, les zones représentent des caractères non pris en charge par la police sélectionnée.

Autres conseils

Cela signifie que votre texte Unicode est converti quelque part en texte ANSI. Les caractères Unicode situés en dehors de Latin-1 ne pouvant pas être convertis en ANSI, ils sont convertis en points d'interrogation. Assurez-vous que votre programme est compilé avec le support Unicode sur (c'est-à-dire que les symboles de préprocesseur UNICODE et _UNICODE sont # définis par votre projet), de sorte que vous appelez toujours les versions Unicode appropriées des différentes fonctions Windows.

En gros, vous avez corrompu le texte. Vous prenez du texte Unicode dans un codage, puis vous l'avez converti en un autre, sans vérifier que le codage cible inclut tous les caractères du texte source. Cela fait, vous avez un tas de charabia.

Voici comment procéder:

  1. Traitement du texte UTF-8 en tant qu'ANSI (sans conversion préalable en page de code valide)
  2. Conversion du texte Unicode en page de code sans vérifier si la page de code contient les bons caractères.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top