Подтвердить что ты не робот

Поиск простых практических примеров на С++, как использовать ICU

Я ищу простые практические примеры на С++ о том, как использовать ICU.
Домашняя страница ICU не помогает в этом отношении.
Меня не интересует, что и почему Unicode.
Несколько демонстраций не являются самодостаточными и не компилируемыми примерами (где включают в себя?)
Я ищу что-то вроде "Hello, World":
Как открыть и прочитать файл, закодированный в UTF-8
Как использовать строковые функции STL/Boost для работы с закодированными строками UTF-8 и др.

4b9b3361

Ответ 1

Нет специального способа прочитать файл UTF-8, если вам не нужно обработать знак байта (BOM). Из-за того, как работает кодировка UTF-8, функции, которые читают строки ANSI, также могут читать строки UTF-8.

Следующий код будет читать содержимое файла (ANSI или UTF-8) и сделать пару конверсий.

#include <fstream>
#include <string>

#include <unicode/unistr.h>

int main(int argc, char** argv) {
    std::ifstream f("...");
    std::string s;
    while (std::getline(f, s)) {
        // at this point s contains a line of text
        // which may be ANSI or UTF-8 encoded

        // convert std::string to ICU UnicodeString
        UnicodeString ucs = UnicodeString::fromUTF8(StringPiece(s.c_str()));

        // convert UnicodeString to std::wstring
        std::wstring ws;
        for (int i = 0; i < ucs.length(); ++i)
            ws += static_cast<wchar_t>(ucs[i]);
    }
}

Взгляните на ссылку API.

Если вы хотите использовать ICU через Boost, см. Boost.Locale.

Ответ 2

  • ICU ≠ Boost, поэтому вы найдете пример того, как использовать функции ICU для управления строками, но не Boost.

  • На каких образцах вы смотрите? Есть образцы в дереве исходных текстов ICU, под icu/source/samples - я думаю, что образцы конвертера открывают и закрывают utf-8, также icu/source/extras/uconv, который является приложением типа iconv.

  • больше образцов в http://source.icu-project.org/repos/icu/icuapps/trunk/

надеюсь, что это поможет