Domanda

Questa è più una questione MBCS che una domanda Unicode. Ho bisogno di creare un'API che restituisce un elenco di struct che ogni istanza contiene un carattere Unicode come uno dei suoi membri. Questo è in .NET così si potrebbe pensare che avrei voluto UTF-16, ma poi per i caratteri asiatici, ci piacerebbe essere due caratteri richiesti. Qual è la migliore pratica per la restituzione caratteri Unicode?

  1. utilizzare un array di 2 UTF-16 caratteri - Prova il primo char per vedere se è surrogata, avere un conteggio?
  2. ignorare la questione surrogata e lasciare al chiamante di capire la codifica glifo effettivo estende le strutture?
  3. Utilizzare una stringa invece così non mi importa se si tratta di uno o due caratteri di lunghezza?
  4. Usa UTF-32

Che cosa fanno le persone di solito fanno per UTF-8? Sto indovinando non hanno mai fare con singoli caratteri e tutto si svolge in una stringa (ad esempio, la ricerca di un carattere in una stringa è veramente fatto con la ricerca di un sub-string). Forse è il C ++ programmatore in me, ma una stringa sembra così mano pesante.

Penso che ho intenzione di fare # 3. Che cosa hanno fatto gli altri?

È stato utile?

Soluzione

Hai ragione sull'utilizzo di stringhe. In Unicode, perché anche un singolo personaggio potrebbe richiedere più Codepoints (che ogni prendere un certo numero di byte a seconda della codifica), non si può davvero mai lavorare su qualcosa di meno di stringhe. Anche le funzioni come isUpper o tale dovrebbe prendere una stringa e funziona solo sul primo elemento di esso.

La ragione carattere potrebbe richiedere più Codepoints è tipicamente a causa delle combinazioni di caratteri, per accenti e così via.

in Unicode FAQ .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top