2009-02-04 11 views
24

Necesito una buena biblioteca Unicode para C++. Necesito:¿Hay un C++ Wrapper amigable STL y UTF-8 para ICU u otra poderosa biblioteca Unicode?

  1. Transformaciones de manera Unicode sensible. Por ejemplo, clasifique todas las cadenas de una manera insensible a mayúsculas y obtenga sus primeros caracteres para el índice. Convierta varias cadenas Unicode en mayúsculas y minúsculas. Divida el texto en una posición razonable: palabras que también funcionarían para chino y japonés.
  2. Formateo de números, fechas en modo local sensible (debe ser seguro para subprocesos).
  3. Soporte transparente de UTF-8 (representación interna primaria).

Hasta donde yo sé, la mejor biblioteca es ICU. Sin embargo, no puedo encontrar la documentación de API amigable para el desarrollador normal con ejemplos. También, por lo que veo, no es demasiado amigable con diseño moderno de C++, funciona con STL, etc. De esta manera:

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; 

¿Hay un buen envoltorio de ICU compatible con STL bajo licencia de código abierto? Preferido es una licencia permisiva como MIT o Boost, pero otros, como LGPLv2 compatible, también están bien.

¿Hay otra biblioteca de alta calidad similar a la UCI?

Plataforma: Unix/POSIX, compatibilidad con Windows no es necesaria.

Edit: Lamentablemente no he iniciado sesión, por lo que no puedo aceptar una respuesta. He adjuntado la respuesta yo solo.

+6

Ooh, 1 para esta pregunta. Es desconcertante que una gran biblioteca como ICU no siga por completo los modismos comunes de C++. – jalf

Respuesta

1

El kit de herramientas de GUI wxWidgets tiene algunas clases de cadena bastante agradables y soporte Unicode. No necesita construir/usar clases de GUI si no quiere. Vea here para más detalles.

1
+0

Parece que proporciona solo un pequeño subconjunto de lo que se requiere. Simplemente permite manipular cadenas UTF-8, pero no admite números bajos/superiores/formateados/... –

+0

Verdadero: es solo para manejar cadenas utf-8, pero puede combinarse fácilmente con algoritmos Boost String. Por supuesto, incluso entonces no reemplaza la UCI. –

21

Esta pregunta fue hecha hace mucho tiempo antes de que yo solo. No había tal biblioteca.

Así que había escrito C++ friendly Boost.Locale biblioteca que envuelve ICU.

Editar ahora parte de Boost: ver Boost.Locale documentation

+0

Esto es increíble. ¿Hiciste una presentación de Boost? –

+0

Comencé un proceso preliminar inicial, antes de la presentación oficial.Siga las listas de correo de impulso – Artyom

+0

@Artyom: Sí, sigo las listas de correo de impulso. Yo realmente aprecio tu esfuerzo. Sin embargo, Boost.Locale está lejos de ser un contenedor completo para la UCI. Estaba interesado en hacer alguna transformación BiDi, y aún no puedo verla en Boost.Locale. ¿Está planeado/debería ser agregado allí? ¿Puedo ayudar? – ybungalobill