Я пытаюсь сохранить некоторые строки текста в кодировке, отличной от моей системы, такой как кириллица, к TFileStream, используя Delphi XE. Однако я не могу найти образец кода для создания закодированного файла?Как использовать TEncoding от Delphi XE для сохранения текста кириллицы или ShiftJis в файл?
Я пробовал использовать тот же код, что и TStrings.SaveToStream, однако я не уверен, что я его правильно реализовал (например, часть WriteBom) и хотел бы знать, как это будет сделано в другом месте. Вот мой код:
FEncoding := TEncoding.GetEncoding(1251);
FFilePool := TObjectDictionary<string,TFileStream>.Create([doOwnsValues]);
//...
procedure WriteToFile(const aFile, aText: string);
var
Preamble, Buffer: TBytes;
begin
// Create the file if it doesn't exist
if not FFilePool.ContainsKey(aFile) then
begin
// Create the file
FFilePool.Add(aFile, TFileStream.Create(aFile, fmCreate));
// Write the BOM
Preamble := FEncoding.GetPreamble;
if Length(Preamble) > 0 then
FFilePool[aFile].WriteBuffer(Preamble[0], Length(Preamble));
end;
// Write to the file
Buffer := FEncoding.GetBytes(aText);
FFilePool[aFile].WriteBuffer(Buffer[0], Length(Buffer));
end;
Заранее спасибо.
Почему бы тебе не показать нам свой код, а затем мы можем прокомментировать? Но я бы сказал, что для кодовой страницы ANSI для Windows, 1251, не требуется спецификация. –
@David: Я редактировал исходное сообщение с моим примером кода. Как я могу узнать, какая кодовая страница нуждается в спецификации? Является ли длина (преамбула)> 0 частью той, что говорит о спецификации? – jonjbar
Что касается спецификаций, ни одна из 8-разрядных кодовых страниц ANSI (например, кириллица не указана) нуждается в спецификации. Вы получаете спецификации на UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. У вас даже нет спецификации по всем этим - вы чаще просматриваете спецификации в Windows, чем на других платформах. –