我正在尝试使用Delphi XE将不同于我的系统(如Cyrillic)的代码页中的一些文本行保存到TFileStream中。但是,我找不到任何代码示例来生成那些编码文件?
我尝试使用与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;
提前致谢。
答案 0 :(得分:4)
不确定你在寻找什么样的例子;以下可能有所帮助 - 该示例将unicode字符串(SL)转换为ANSI Cyrillic:
procedure SaveCyrillic(SL: TStrings; Stream: TStream);
var
CyrillicEncoding: TEncoding;
begin
CyrillicEncoding := TEncoding.GetEncoding(1251);
try
SL.SaveToStream(Stream, CyrillicEncoding);
finally
CyrillicEncoding.Free;
end;
end;
答案 1 :(得分:2)
如果我理解它很简单。声明一个与Cyrillic 1251具有亲和力的AnsiString:
type
// The code page for ANSI-Cyrillic is 1251
CyrillicString = type AnsiString(1251);
然后将Unicode字符串分配给其中一个:
var
UnicodeText: string;
CyrillicText: CyrillicString;
....
CyrillicText := UnicodeText;
然后,您可以使用传统方式将CyrillicText
写入流:
if Length(CyrillicText)>0 then
Stream.WriteBuffer(CyrillicText[1], Length(CyrillicText));
ANSI编码的文本文件应该没有BOM。