Domanda

Sono riuscito principalmente a ignorare tutte queste cose con caratteri multi-byte, ma ora ho bisogno di fare un po 'di lavoro sull'interfaccia utente e so che la mia ignoranza in quest'area mi raggiungerà! Qualcuno può spiegare in pochi paragrafi o meno solo ciò che devo sapere per poter localizzare le mie applicazioni? Quali tipi dovrei usare (utilizzo sia .Net che C / C ++ e ho bisogno di questa risposta sia per Unix che per Windows).

È stato utile?

Soluzione

Dai un'occhiata a Il minimo assoluto che ogni sviluppatore di software deve assolutamente conoscere positivamente, Unicode e set di caratteri (senza scuse!)

MODIFICA 20140523 : Inoltre, guarda Personaggi, simboli e the Unicode Miracle di Tom Scott su YouTube - è poco meno di dieci minuti e una meravigliosa spiegazione del brillante "hack" che è UTF-8

Altri suggerimenti

Una codifica di caratteri consiste in una sequenza di codici che cercano ciascuno un simbolo da un determinato set di caratteri. Leggi questo buon articolo su Wikipedia sulla codifica dei caratteri .

UTF8 (UCS) utilizza da 1 a 4 byte per ogni simbolo. Wikipedia offre una panoramica generale di come funziona il rundown multi-byte:

  
      
  • Il bit più significativo di un carattere a byte singolo è sempre 0.
  •   
  • I bit più significativi del primo byte di una sequenza multi-byte   determinare la lunghezza della sequenza.   Questi bit più significativi sono 110   per sequenze a due byte; 1110 per   sequenze di tre byte e così via.
  •   
  • I byte rimanenti in una sequenza multi-byte hanno 10 come i due più   bit significativi.
  •   
  • Un flusso UTF-8 non contiene né il byte FE né FF. Questo si assicura che a   Lo stream UTF-8 non sembra mai un UTF-16   stream che inizia con U + FEFF   (Segno di byte)
  •   

La pagina mostra anche un ottimo confronto tra i vantaggi e gli svantaggi di ciascun tipo di codifica dei caratteri.

UTF16 (UCS2)

Usa da 2 byte a 4 byte per ciascun simbolo.

UTF32 (UCS4)

utilizza 4 byte sempre per ogni simbolo.

carattere significa solo un byte di dati e non è una codifica effettiva. Non è analogo a UTF8 / UTF16 / ascii. Un puntatore char * può fare riferimento a qualsiasi tipo di dati e qualsiasi codifica.

STL:

Sia std's std :: wstring che std :: string non sono progettati per codifiche di caratteri a lunghezza variabile come UTF-8 e UTF-16.

Come implementare:

Dai un'occhiata alla libreria iconv. iconv è una potente libreria di conversione di codifica di caratteri utilizzata da progetti come libxml (parser XML C di Gnome)

Altre grandi risorse sulla codifica dei caratteri:

Saggezza ricevuta suggerisce che l'articolo di Spolsky manca un paio di punti importanti.

Questo articolo è consigliato come più completo: Lo standard Unicode®: un'introduzione tecnica

Questo articolo è anche una buona introduzione: Nozioni di base Unicode

Quest'ultimo, in particolare, offre una panoramica delle forme e degli schemi di codifica dei caratteri per Unicode.

I vari standard UTF sono modi per codificare "punti di codice". Un punto di codice è l'indice nel set di caratteri Unicode.

Un'altra codifica è UCS2 che è sempre a 16 bit e quindi non supporta l'intera gamma Unicode.

Buono a sapersi è anche che un punto di codice non è uguale a un carattere. Ad esempio, un carattere come å può essere rappresentato sia come punto di codice sia come due punti di codice uno per la a e uno per l'anello.

Il confronto di due stringhe unicode richiede quindi la normalizzazione per ottenere la rappresentazione canonica prima del confronto.

C'è anche il problema con i caratteri. Esistono due modi per gestire i caratteri. O usi un carattere gigantesco con glifi per tutti i caratteri Unicode di cui hai bisogno (penso che le versioni recenti di Windows abbiano uno o due di questi caratteri). Oppure usi una libreria in grado di combinare glifi di vari tipi di carattere dedicati ai sottoinsiemi dello standard Unicode.

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