Domanda

Sto tentando di visualizzare del testo nel mio programma usando (diciamo) Windows GDI e alcuni dei caratteri unicode vengono visualizzati come punti interrogativi? Che succede?

Vedi anche: Cosa significa quando il mio testo viene visualizzato come caselle?

È stato utile?

Soluzione

In Windows ci sono 2 problemi di visualizzazione comuni che si verificano quando si tenta di visualizzare caratteri Unicode:

  1. il testo appare talvolta come punti interrogativi

    • Ciò si verifica quando i dati Unicode vengono convertiti in una codifica del set di caratteri a 8 bit (o caratteri tecnicamente multi-byte) di solito tramite la tabella codici di sistema (ma è possibile specificare altre tabelle codici nelle chiamate di conversione). Se il set di caratteri di destinazione a 8 bit non include i caratteri necessari, tutti i caratteri non rappresentabili nel set di caratteri di destinazione vengono convertiti in punti interrogativi.
  2. il testo appare talvolta come caselle

    • Questo è un problema con il font che non ha il glpyh per un personaggio particolare. Le caselle vengono visualizzate in caso di mancata corrispondenza tra i caratteri Unicode nel documento e quelli supportati dal carattere. In particolare, le caselle rappresentano i caratteri non supportati dal carattere selezionato.

Altri suggerimenti

Significa che il tuo testo Unicode viene convertito in testo ANSI da qualche parte. Poiché i caratteri Unicode al di fuori di Latin-1 non possono essere convertiti in ANSI, vengono convertiti in punti interrogativi. Assicurati che il tuo programma sia compilato con il supporto Unicode su (ovvero i simboli di preprocessore UNICODE e _UNICODE sono # definiti dal tuo progetto), in modo da chiamare sempre le versioni Unicode appropriate delle varie funzioni di Windows.

Fondamentalmente hai corrotto il testo. Stai prendendo il testo Unicode in una codifica e poi l'hai convertito in un'altra codifica senza verificare che la codifica di destinazione includa tutti i caratteri nel testo di origine. Dopo averlo fatto, hai un sacco di incomprensioni.

I modi per farlo includono:

  1. Trattare il testo UTF-8 come ANSI (senza prima convertirlo in una tabella codici valida)
  2. Conversione del testo Unicode in una tabella codici senza verificare se la tabella codici contiene i caratteri giusti.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top