Qual è la procedura migliore per l'elaborazione Unicode in C ++?
Qual è la procedura migliore per l'elaborazione Unicode in C ++?
Risposte:
is_alpha
meno che non sia la definizione che desideri.string
se ti interessa la correttezza, usa sempre la tua libreria Unicode per questo.Se non ti interessa la retrocompatibilità con i precedenti standard C ++, l'attuale standard C ++ 11 ha il supporto Unicode integrato: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
Quindi la vera best practice per l'elaborazione Unicode in C ++ sarebbe quella di utilizzare le funzionalità integrate per esso. Tuttavia, questa non è sempre una possibilità con le basi di codice più vecchie, poiché lo standard è così nuovo al momento.
EDIT: Per chiarire, C ++ 11 è a conoscenza di Unicode in quanto ora ha il supporto per i letterali Unicode e le stringhe Unicode. Tuttavia, la libreria standard ha solo un supporto limitato per l'elaborazione e la conversione Unicode. Per le tue esigenze attuali questo potrebbe essere sufficiente. Tuttavia, se è necessario eseguire una grande quantità di sollevamento di carichi pesanti in questo momento, potrebbe essere comunque necessario utilizzare qualcosa come ICU per un'elaborazione più approfondita. Ci sono alcune proposte attualmente in lavorazione per includere un supporto più robusto per la conversione del testo tra diverse codifiche. La mia ipotesi (e spero) è che questo farà parte del prossimo rapporto tecnico .
La nostra azienda (e altri) utilizzano la libreria Internation Components for Unicode (ICU) open source originariamente sviluppata da Taligent.
Gestisce stringhe, impostazioni locali, conversioni, data / ora, regole di confronto, trasformazioni, ecc. al.
Inizia con la guida utente ICU
Ecco una lista di controllo per la programmazione Windows:
Guarda il confronto tra stringhe senza distinzione tra maiuscole e minuscole in C ++
Questa domanda contiene un collegamento alla documentazione Microsoft su Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Se guardi sul lato di navigazione a sinistra su MSDN accanto a quell'articolo, dovresti trovare molte informazioni relative alle funzioni Unicode. Fa parte di un capitolo sulla "Codifica dei caratteri" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Ha le seguenti sottosezioni:
Anche se questa potrebbe non essere la migliore pratica per tutti, puoi scrivere le tue routine C ++ UNICODE se vuoi!
Ho appena finito di farlo in un fine settimana. Ho imparato molto, anche se non garantisco che sia privo di bug al 100%, ho fatto molti test e sembra funzionare correttamente.
Il mio codice è sotto la nuova licenza BSD e può essere trovato qui:
http://code.google.com/p/netwidecc/downloads/list
Si chiama WSUCONV e viene fornito con un programma main () di esempio che converte tra UTF-8, UTF-16 e ASCII standard. Se butti via il codice principale, hai una bella libreria per leggere / scrivere UNICODE.
Come è stato detto sopra, una libreria è la soluzione migliore quando si utilizza un sistema di grandi dimensioni. Tuttavia, alcune volte vuoi gestire le cose da solo (forse perché la libreria userebbe molte risorse come su un microcontrollore). In questo caso vuoi una semplice libreria da cui copiare le parti per le cose che ti servono effettivamente.
Il codice di esempio di Willow Schlanger sembra buono (vedi la sua risposta per maggiori dettagli).
Ho anche trovato un altro che ha un codice più piccolo, ma non ha il controllo completo degli errori e gestisce solo UTF-8 ma era più semplice da cui estrarre le parti.
Ecco un elenco delle librerie incorporate che sembrano decenti.
Utilizza i componenti internazionali di IBM per Unicode
Dai un'occhiata alle raccomandazioni di UTF-8 Everywhere
string
dati binari.