Delphi XE8:MemoryStream充斥着垃圾

时间:2015-09-08 02:53:55

标签: delphi memorystream delphi-xe8

"<(td|TD).*>", "<(td|TD)(.*)>"

test.ini 包含一个简短的纯文本字符串。 MemoryStream.Size 中的内存大小为8,这是正确的。 TempString 的内容超过一百个控制字符。所有帮助表示赞赏。

编辑:此代码生成正确的文件,但要求我编写一份不安全的副本:

IdFTP_Main.Get('test.ini',MemoryStream);
MemoryStream.Read(Buffer,MemoryStream.Size);
SetString(TempStatus, PChar(MemoryStream.Memory), MemoryStream.Size div SizeOf(WideChar));

1 个答案:

答案 0 :(得分:2)

您正在将流视为UTF-16LE编码。我怀疑情况并非如此。您需要确定编码。然后使用这样的字符串流:

var
  Stream: TStringStream;
  Str: string
....
Stream := TStringStream.Create('', TEncoding.UTF8);
try
  IdFTP_Main.Get('test.ini', Stream);
  Str := Stream.DataString;
finally
  Stream.Free;
end;

或者像这样的字节流:

var
  Stream: TBytesStream;
  Str: string
....
Stream := TBytesStream.Create;
try
  IdFTP_Main.Get('test.ini', Stream);
  Str := TEncoding.UTF8.GetString(Stream.Bytes, 0, Stream.Size);
finally
  Stream.Free;
end;

我已经猜到了编码。您需要替换正确的编码。

在这种情况下调用流的Read方法毫无意义。我只是忽略了这一点。

我们无法看到您如何配置TIdFTP对象。 TransferType设置正确吗?为了让您进一步调试,请使用上面的字节流代码并转储下载的字节。检查它们是否符合您的期望。