Запишите строку Unicode в файл с помощью CodeGear C++ Builder 2009

Я только что перешел с Builder 6 на Builder 2009 и у меня есть вопрос.

Как я могу записать строку юникода в файл?

TBytes Preamble1 = TEncoding::Unicode->GetPreamble();
UnicodeString str1("string1");
int len = TEncoding::Unicode->GetByteCount(str1);

FileWrite( iFile,&Preamble1[0],Preamble1.Length );

FileWrite( iFile,str1.c_str(),len );

Это то, что я делаю сейчас, но я думаю, должен быть какой-то собственный способ.
Кстати, нормально ли получить преамбулу один раз и предположить, что в течение срока службы приложения она не изменится? Из доступной документации для UnicodeString кажется, что это всегда UTF-16 LE.


person Andrew    schedule 18.08.2009    source источник
comment
Разве CodeGear C++ не поддерживает стандартные библиотеки C++? Почему бы вам не использовать std::wstring и std::ofstream для выполнения этой работы?   -  person Sahas    schedule 18.08.2009
comment
Не могли бы вы привести рабочий пример? Я никогда не использовал функции unicode stl, только обычные.   -  person Andrew    schedule 18.08.2009


Ответы (1)


Мой первый вопрос будет "Какой файл"?

Предполагая, что это текстовый файл, а не двоичный, какую кодировку вы хотите получить на выходе? UTF-8 обычно является хорошим выбором, потому что он поддерживается такими вещами, как блокнот, и для обычных «латинских» символов нет накладных расходов.

Лично для написания «простых» текстовых файлов я просто добавляю строки в TStringList, а затем использую метод SaveToFile.

TStringList *list = new TStringList;
list->Add(str1);
list->Add(str2);
...
list->SaveToFile(filename, TEncoding::UTF8);
person Roddy    schedule 19.08.2009
comment
Хороший ответ. Спасибо. Да, я спрашивал о простых текстовых файлах. Моя основная цель состояла в том, чтобы реализовать ведение журнала Unicode, поэтому я написал простой класс шаблона, который открывает файл с выбранным типом кодировки (UTF-8, UTF-16 BE/LE), а затем просто выводит FileWrite по мере их поступления. один раз написать действие, ваш вариант кажется лучшим. - person Andrew; 20.08.2009