Для разъяснения то, что 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();
Нет специального способа чтения файла 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 .