Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
#1

Icu итератор - C++

05.07.2016, 10:53. Просмотров 220. Ответов 3
Метки нет (Все метки)

Здравствуйте. Подскажите как с помощью icu проитерировать посимвольно UnicodeString и на выходе получить то, что сразу можно в обычный string запихнуть. Нагуглил такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <unicode/unistr.h>
#include <unicode/uchriter.h>
/******/
    icu::UnicodeString ustr("Привет Мир! Hello World! дё–з•ЊпјЊдЅ*好!");
    
    const UChar *testText = ustr.getTerminatedBuffer();
    UCharCharacterIterator iter(testText, u_strlen(testText));
    
    while(iter.hasNext()){
        std::cout << iter.next32PostInc() << std::endl;
    }
Но next32PostInc() возвращает номер символа в unicode таблице, преобразовать его в строку можно так:
C++
1
2
3
    icu::UnicodeString uni_str((UChar32)iter.next32PostInc());
    std::string str;
    uni_str.toUTF8String(str);
Что кажется мне странным, в библиотеке есть куча других итераторов, но как они работают не совсем понятно. Если кто знает более адекватное решение, подскажите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2016, 10:53     Icu итератор
Посмотрите здесь:

C++ Builder ICU - International Components for Unicode (библиотека для раб. с юникод)
C++ Итератор С++
итератор C++
Итератор!!!!! C++
C++ итератор
Итератор ? C++
Итератор C++
Библиотека icu - ошибка компиляции C++ Builder
итератор C++
Итератор C++
Итератор C++
Как правильно собрать ICU для g++ под Windows? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1753 / 1180 / 274
Регистрация: 05.06.2014
Сообщений: 3,398
05.07.2016, 11:43     Icu итератор #2
Нет, ну я понимаю что не спортивно, но:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    const char*str="Привет Мир! Hello World! дё–з•Њ,дЅ*好!";//разумеется, строка должна быть в utf-8
    for(const char*read_pos=str;*read_pos;)
    {
        std::string buf;
        buf.push_back(*read_pos++);
        while((*read_pos&192)==128)
            buf.push_back(*read_pos++);
        cout<<buf<<endl;
    }
    return 0;
}
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
05.07.2016, 12:25  [ТС]     Icu итератор #3
Renji, спасибо, но к сожалению icu мне нужен не только для этого)
HighPredator
5429 / 1812 / 332
Регистрация: 10.12.2010
Сообщений: 5,367
Записей в блоге: 3
06.07.2016, 16:35     Icu итератор #4
Юзайте метод current. Он вам вернет тот ючар на который смотрит итератор.

Добавлено через 2 минуты
А вообще надо использовать их конвертеры. Инфа тут http://userguide.icu-project.org/conversion/converters
Yandex
Объявления
06.07.2016, 16:35     Icu итератор
Ответ Создать тему
Опции темы

Текущее время: 20:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru