Delphi XE2を使用してTMemoryStream(ユニコード文字列を含む)を別のTMemoryStreamにコピーすると、奇妙な動作が発生します。
TMemoryStreamのインスタンスが2つあります。最初のインスタンスには、Unicodeテキスト(SourceMS)が含まれています。次のように、任意のデータを2番目のMemoryStream(DestMS)に書き込み、最初のストリームの内容を2番目のストリームにコピーします。
var
SomeInt: Integer;
SomeByte: Byte;
SourceMS, DestMS: TMemoryStream;
begin
...
DestMS.Write(SomeInt, SizeOf(SomeInt));
DestMS.Write(SomeByte, SizeOf(SomeByte));
SourceMS.SaveToFile('c:\SourceMS.txt'); // SourceMS.txt contains the unicode chars
DestMS.CopyFrom(SourceMS, 0); // copy the whole content of SourceMS to DestMS
DestMS.SaveToFile('c:\DestMS.txt'); // DestMS.txt DOEST NOT contain unicode chars
end;
Unicodeを失うことなく(暗黙の変換を使用して)、最初のストリームの内容を2番目のストリームにコピーするにはどうすればよいですか?「Unicodeを失う」とは、次のことを意味します。Unicode文字列は実際に2番目のストリームにコピーされますが、Unicodeは失われます。ANSI文字のみを取得します。