"<(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));
答案 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
设置正确吗?为了让您进一步调试,请使用上面的字节流代码并转储下载的字节。检查它们是否符合您的期望。