У вас будет соблазн напрямую использовать целое число TStringStream
класса TMemoryStream
.Но этот класс TStringStream
будет кодировать UnicodeString в AnsiString перед хранением, в версии Unicode Delphi ...
Итак, вот некоторые функции для создания экземпляра TMemoryStream
с чистым содержимым Unicode, а затем получения обратноэтот текст:
function StringToMemoryStream(const Text: string): TMemoryStream;
var Bytes: integer;
begin
if Text='' then
result := nil else
begin
result := TMemoryStream.Create;
Bytes := length(Text)*sizeof(Char);
result.Size := Bytes;
move(pointer(Text)^,result.Memory^,Bytes);
end;
end;
function MemoryStreamToString(MS: TMemoryStream): string;
begin
if MS=nil then
result := '' else
SetString(result,PChar(MS.Memory),MS.Size div sizeof(Char));
end;
Убедитесь, что вы Free
TMemoryStream
, когда он вам больше не нужен.
Используя sizeof(Char)
и PChar
, этоткод также будет работать с предыдущей версией Delphi, не поддерживающей Юникод.