D2007からXE2に変換して、この関数を変換しました
function Add_Line( FileStream : TFileStream; ALine : string) : boolean;
に
function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;
var
AStr: ANSISTring;
begin
Result := True;
if Enc = nil then Enc := TEncoding.ANSI;
try
//Old FileStream.WriteBuffer( Pointer(ALine)^, Length(ALine) );
if Enc = TEncoding.UTF8 then
AStr := UTF8Encode(ALine)
else
AStr := ANSIString(ALine);
FileStream.WriteBuffer( AStr[1], Length(ALine) );
end;
except
Result := False;
end;
end;
理論的根拠:
Add_Lineを使用してコードをできるだけ変更しない
Unicodeへの自動変更を受け入れます。最後の瞬間にのみ、8ビットのテキストファイルを書き込みます(これはXMLおよびCSVで使用されます)。将来的には、必要に応じてUTF-16ファイルに移動することもできます。
私は次のようなものを定義したかったでしょう:
function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = TEncoding.ANSI) : boolean;
しかし、コンパイラは文句を言います;-)
そのようなことは可能ですか?