2009-02-04 4 views
24

Мне нужна хорошая библиотека Unicode для C++. Мне нужно:Есть ли совместимая с C++ оболочка STL и UTF-8 для ICU или другая мощная библиотека Unicode

  1. Преобразования в чувствительном для Unicode пути. Например, сортируйте все строки в режиме без учета регистра и получите их первые символы для индекса. Преобразование различных строк Unicode в верхний и нижний регистр. Разделите текст в разумной позиции - слова, которые будут работать и для китайцев, и для японцев.
  2. Форматирование чисел, дат в соответствии с местными правилами (должно быть потокобезопасным).
  3. Прозрачная поддержка UTF-8 (первичное внутреннее представление).

Насколько я знаю, лучшая библиотека - это отделение интенсивной терапии. Тем не менее, я не могу найти нормальную документацию API для разработчиков с примерами. Также, насколько я вижу, он не слишком дружелюбен с современным дизайном C++, работой с STL и т. Д. Например:

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; 

Есть ли хорошая совместимая оболочка ICU, совместимая с STL, выпущенная под лицензией Open Source? Предпочтительным является разрешающая лицензия, такая как MIT или Boost, но другие, такие как совместимые с LGPLv2, также в порядке.

Есть ли еще библиотека высокого качества, подобная ICU?

Платформа: Unix/POSIX, поддержка Windows не требуется.

Редактировать: К сожалению, я не был зарегистрирован, поэтому я не могу принять ответ. Я сам приложил ответ.

+6

OOH, +1 на этот вопрос. Непонятно, что большая библиотека, подобная ICU, полностью не соблюдает общие идиомы C++. – jalf

ответ

1

wxWidgets GUI toolkit имеет несколько довольно классных классов строк и поддержку юникода. Вам не нужно создавать/использовать классы GUI, если вы этого не хотите. См. here.

1

Это соответствует счету?

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

+0

Кажется, что он предоставляет только небольшое подмножество того, что требуется. Он просто позволяет обрабатывать строку UTF-8 String, но не поддерживает toLower/toUpper/номера форматирования/... –

+0

True - это только для обработки строк utf-8, но его можно легко связать с алгоритмами Boost String. Конечно, даже тогда он не заменяет ICU. –

21

Этот вопрос был задан довольно долго, прежде чем сам. Не было такой библиотеки.

Итак, я написал C++ дружественную библиотеку Boost.Locale, которая обертывает ICU.

Редактировать Теперь часть повышающего: см Boost.Locale documentation

+0

Это потрясающе. Вы сделали подачу Boost? –

+0

Я начал предварительный предварительный процесс - до официального представления.Следуйте за списками пересылки – Artyom

+0

@Artyom: Да, я следую за списками пересылки. Я очень ценю ваши усилия. Однако Boost.Locale далеко не является полной оболочкой для ICU. Мне было интересно сделать некоторые преобразования BiDi, и я пока не вижу его в Boost.Locale. Планируется ли его добавить/добавить? Могу ли я помочь? – ybungalobill