gpt4 book ai didi

delphi - 目标多字节代码页 : how to convert MemoryStream to String 中不存在 Unicode 字符的映射

转载 作者:行者123 更新时间:2023-12-02 13:16:56 25 4
gpt4 key购买 nike

我的目标是能够将TMemoryStream转换为string。我有以下代码将数据获取到 TMemoryStream:

var
idHttp : TIdHTTPEx;
url : string;
slTemp : TStringList;
memoryStream : TMemoryStream;
begin
try

idHttp := TIdHTTPEx.Create(nil);
slTemp := TStringList.Create;
memoryStream := TMemoryStream.Create;
try
url := GetURL;
SetParams(slTemp);

idHttp.Request.Accept := 'application/json, text/javascript, */*; q=0.01';
idHttp.Request.AcceptEncoding := 'gzip, deflate, br';
idHttp.Request.AcceptLanguage := 'en-US,en;q=0.9';
idHttp.Request.CacheControl := 'no-cache';
idHttp.Request.Connection := 'keep-alive';
idHttp.Request.ContentLength := 16;
idHttp.Request.ContentType := 'application/x-www-form-urlencoded; charset=UTF-8';

idHttp.Post(url, slTemp, memoryStream);
Result := MemoryStreamToString(memoryStream);
finally
memoryStream.Free;
slTemp.Free;
idHttp.Free;
end;

except on E : Exception do
begin
Result := 'e:' + E.Message;
end;
end;
end;

这是我将其转换为字符串的代码:

function MemoryStreamToString(MemoryStream : TMemoryStream): string;
var
StringStream: TStringStream;
begin
Result:='';

StringStream:= TStringStream.Create('', TEncoding.UTF8);
try
MemoryStream.Position := 0;
StringStream.CopyFrom(MemoryStream, MemoryStream.Size);

Result:= StringStream.DataString;
Result := Result;
finally
FreeAndNil(StringStream);
end;

end;

我的函数在大多数转换中都可以正常工作,但在这个转换中却不行。我检查了这些链接:link1 , link2但他们和我的情况不同。我试过link3也一样,但仍然失败。

知道如何解决这个问题吗?

最佳答案

您不需要手动解码原始数据。只需让 TIdHTTP 为您完成即可。 Post() 方法有一个重载,返回解码后的字符串:

Result := idHttp.Post(url, slTemp);

此外,您需要完全删除这一行:

idHttp.Request.AcceptEncoding := 'gzip, deflate, br';

否则,如果服务器决定发送压缩响应,TIdHTTP 将无法正确解码响应。您手动授予服务器执行此操作的权限,但您没有设置 TIdHTTP.Compressor 属性,以便 TIdHTTP 可以处理解压缩。除非您愿意并且能够手动检测和解码实际以您指定的格式之一编码的响应,否则请勿手动设置 AcceptEncoding。否则,只需让 TIdHTTP 根据其实际功能在内部管理 AcceptEncoding 属性即可。

关于delphi - 目标多字节代码页 : how to convert MemoryStream to String 中不存在 Unicode 字符的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56593123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com