- std :: string подходит для хранилища UTF-8.
- Если вам нужно проанализировать сам текст, осведомленность о UTF-8 не сильно вам поможет, поскольку в ней слишком много всегоUnicode, которые не работают на базе кодовых точек.
Взгляните на библиотеку Boost.Locale (она использует ICU под капотом):
Оно не легкое, но позволяет правильно обрабатывать Unicode и использует std::string
в качестве хранилища.
Если вы ожидаете найти легковесную библиотеку с поддержкой Юникода для работы со строками, вы не найдете таких вещей, потому что Юникод не является легковесным.И даже относительно «простые» вещи, такие как преобразование в верхний регистр, преобразование в нижний регистр или нормализация Unicode, требуют сложных алгоритмов и доступа к базе данных Unicode.
Если вам нужна возможность перебирать точки кода (эти BTW1025 * не символов) посмотрите http://utfcpp.sourceforge.net/
Ответ на комментарий:
1) Найдите форматы файлов для включенных мной файлов
std :: string :: find отлично подходит для этого.
2) Обнаружение разрыва строки
Это не простовопрос.Вы когда-нибудь пытались найти разрыв строки в китайском / японском тексте?Наверное, нет, так как пространство не разделяет слова.Так что обнаружение разрыва строки - тяжелая работа.(Я не думаю, что даже glib делает это правильно, я думаю, что только в pango есть что-то подобное)
И, конечно, Boost.Locale делает это и правильно.
И если вам нужно сделатьэто только для европейских языков, просто ищите пробел или знаки препинания, поэтому std::string::find
более чем хорошо.
3) Подсчет символов (или теперь кодовая точка) Глядя на utfcpp thx
Символы не являются кодовыми точками, например, еврейское слово Shalom - «שָלוֹם» состоит из 4 символов и 6 Unicode-точек, где для кодовых гласных используются две кодовые точки.То же самое для европейских языков, где одиночный символ представлен двумя кодовыми точками, например: «ü» может быть представлен как «u», а «¨» - двумя кодовыми точками.
Так что, если вам известно оэти проблемы, то с utfcpp все будет в порядке, иначе вы не найдете ничего проще.