2009-02-04 3 views
24

Ho bisogno di una buona libreria Unicode per C++. Ho bisogno di:C'è un Wrapper C++ amichevole per STL e UTF-8 per ICU, o altra potente libreria Unicode

  1. Trasformazioni in modo sensibile Unicode. Ad esempio, ordina tutte le stringhe senza distinzione tra maiuscole e minuscole e ottieni i loro primi caratteri per l'indice. Converti varie stringhe Unicode in maiuscolo e minuscolo. Dividi il testo in una posizione ragionevole - parole che potrebbero funzionare anche per il cinese e il giapponese.
  2. Formattazione di numeri, date in modo sensibile alle impostazioni internazionali (deve essere protetto da thread).
  3. Supporto trasparente di UTF-8 (rappresentazione interna primaria).

Per quanto ne so, la migliore biblioteca è ICU. Tuttavia, non riesco a trovare la normale documentazione API compatibile con gli sviluppatori con esempi. Inoltre, per quanto vedo, non è troppo amichevole con il design moderno C++ , funziona con STL e così via. In questo modo:

std::string msg; 
unistring umsg.from_utf8(msg); 
unistring::word_iterator wi; 
for(wi=umsg.words().begin(),n=0;wi!=usmg.words().wi_end(),n<10;++wi,++n) 
    ; 
msg=umsg.substr(umsg.words().begin(),wi).to_utf8(); 
cout<<_("Five 10 words are ")<<msg; 

Esiste un buon wrapper ICU compatibile con STL rilasciato con licenza Open Source? Preferibile è una licenza permissiva come MIT o Boost, ma anche altri, come LGPLv2 compatibile, sono OK.

Esiste un'altra libreria di alta qualità simile all'ICU?

Piattaforma: Unix/POSIX, supporto Windows non richiesto.

Modifica: sfortunatamente non ho effettuato l'accesso, quindi non posso accettare una risposta. Ho allegato la risposta da solo.

+6

Ooh, +1 per questa domanda. È sconcertante che una grande libreria come ICU non riesca a seguire gli idiomi C++ comuni. – jalf

risposta

1

Il toolkit GUI wxWidgets presenta alcune classi di stringhe piuttosto semplici e supporto Unicode. Non è necessario creare/utilizzare le classi GUI se non si desidera. Vedi here per i dettagli.

1
+0

Sembra che fornisca solo un piccolo sottoinsieme di ciò che è richiesto. Semplicemente consente di gestire la stringa UTF-8, ma non supporta i numeri di tipo Lower/toUpper/formattazione/... –

+0

True: è solo per la gestione delle stringhe utf-8, ma può essere facilmente accoppiato con gli Algoritmi Boost String. Certo, anche allora non sostituisce l'ICU. –

21

Questa domanda è stato chiesto molto tempo prima di tutto da solo. Non c'era una tale biblioteca.

Così avevo scritto C++ friendly Boost.Locale libreria che avvolge ICU.

Modifica ora parte di Boost: vedi Boost.Locale documentation

+0

Questo è fantastico. Hai fatto una sottomissione Boost? –

+0

Ho iniziato un processo preliminare iniziale - prima della presentazione ufficiale.Segui le mailing list di boost – Artyom

+0

@Artyom: Sì, sto seguendo le mailing list di boost. Apprezzo davvero il tuo impegno. Tuttavia Boost.Locale è ben lungi dall'essere un wrapper completo per ICU. Ero interessato a fare qualche trasformazione BiDi, e non riesco ancora a vederlo in Boost.Locale. È previsto/dovrebbe essere aggiunto lì? Posso aiutare? – ybungalobill