2009-02-04 15 views
24

J'ai besoin d'une bonne bibliothèque Unicode pour C++. J'ai besoin de:Existe-t-il un wrapper C++ compatible avec STL et UTF-8 pour ICU, ou toute autre bibliothèque Unicode puissante?

  1. Transformations d'une manière sensible à l'Unicode. Par exemple, trier toutes les chaînes de manière insensible à la casse et obtenir leurs premiers caractères pour l'index. Convertir diverses chaînes Unicode en majuscules et en minuscules. Diviser le texte à une position raisonnable - des mots qui fonctionneraient aussi pour le chinois et le japonais.
  2. Mise en forme des nombres, des dates de manière sensible aux paramètres régionaux (doit être sûre pour les threads).
  3. Prise en charge transparente de l'UTF-8 (représentation interne primaire).

Autant que je sache, la meilleure bibliothèque est ICU. Cependant, je ne trouve pas de documentation d'API compatible avec les développeurs avec des exemples. Aussi loin que je vois, il n'est pas trop amical avec conception C++ moderne, travailler avec STL et ainsi de suite. Comme ceci:

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; 

Existe-t-il un bon encapsuleur ICU compatible STL publié sous licence Open Source? La préférence est une licence permissive comme MIT ou Boost, mais d'autres, comme la compatibilité LGPLv2, sont correctes.

Existe-t-il une autre bibliothèque de haute qualité similaire à ICU?

Plate-forme: Unix/POSIX, la prise en charge de Windows n'est pas requise.

Modifier: Malheureusement, je ne étais pas connecté, donc je ne peux pas faire accepter une réponse. J'ai joint la réponse par moi-même.

+6

Ooh, +1 pour cette question. Il est déconcertant qu'une grande bibliothèque comme ICU échoue complètement à suivre les idiomes courants du C++. – jalf

Répondre

1

La boîte à outils GUI wxWidgets a des classes de chaînes plutôt sympa et un support Unicode. Vous n'avez pas besoin de créer/utiliser des classes GUI si vous ne le souhaitez pas. Voir here pour plus de détails.

1

Est-ce que cela correspond à la facture?

http://www.codeproject.com/KB/string/utf8cpp.aspx

+0

Il semble que cela ne fournit qu'un petit sous-ensemble de ce qui est requis. Il permet simplement de gérer UTF-8 String, mais ne supporte pas toLower/toUpper/nombres de formatage/... –

+0

True - c'est seulement pour manipuler les chaînes utf-8, mais il peut facilement être couplé avec Boost String Algorithms. Bien sûr, même alors, il ne remplace pas l'ICU. –

21

Cette question a été posée très longtemps auparavant par moi-même. Il n'y avait pas une telle bibliothèque.

J'ai donc écrit une bibliothèque conviviale Boost.Locale qui encapsule ICU.

Modifier maintenant partie de Boost: voir Boost.Locale documentation

+0

C'est génial. Avez-vous fait une soumission Boost? –

+0

J'ai commencé un processus préliminaire - avant la soumission officielle.Suivez les listes de diffusion boost – Artyom

+0

@Artyom: Oui, je suis les listes de diffusion boost. J'apprécie vraiment votre effort. Cependant Boost.Locale est loin d'être un emballage complet pour ICU. J'étais intéressé à faire une certaine transformation de BiDi, et je ne peux pas encore le voir dans Boost.Locale. Est-il prévu de/devrait-il y être ajouté? Puis-je aider? – ybungalobill