Ищете простые практические примеры C ++, как использовать ICU - PullRequest
22 голосов
/ 15 мая 2011

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

Ответы [ 2 ]

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

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

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

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

9 голосов
/ 16 мая 2011

Нет специального способа чтения файла 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's 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 .

...