Looking for simple practical C++ examples of how to use ICU

Для разъяснения то, что Gillian сказала приблизительно 4 строки, если у Вас есть что-то вроде этого:

string a,b,c,d;
 a = b + c + d;

тогда это быстрее использовало бы строки и плюс оператор. Это вызвано тем, что (как Java, как Eric указывает), это внутренне использует StringBuilder автоматически (На самом деле, это использует примитив, который StringBuilder также использует)

Однако, если то, что Вы делаете, ближе к:

string a,b,c,d;
 a = a + b;
 a = a + c;
 a = a + d;

Тогда необходимо явно использовать StringBuilder..Net, автоматически не создает StringBuilder здесь, потому что это было бы бессмысленно. В конце каждой строки "a" должен быть (неизменной) строкой, таким образом, это должно было бы создать и расположить StringBuilder на каждой строке. Для скорости необходимо было бы использовать тот же StringBuilder, пока Вы не сделаны, создав:

string a,b,c,d;
StringBuilder e = new StringBuilder();
 e.Append(b);
 e.Append(c);
 e.Append(d);
 a = e.ToString();
22
задан user754425 15 May 2011 в 19:48
поделиться

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'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 .

9
ответ дан 29 November 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: