gpt4 book ai didi

rest - Delphi XE3 - datasnap REST 服务器 UTF8 输出

转载 作者:行者123 更新时间:2023-12-03 15:47:53 27 4
gpt4 key购买 nike

我正在Delphi XE3中实现REST服务。实际访问:

var metaData: TDSInvocationMetadata;
metaData.ResponseContent:= output;

生成 XML 输出。不幸的是,经过数小时的测试各种 UTF8 到 Unicode 转换方法后,我仍然无法获得正确的 UTF8 输出。这是我的例子:

function TServerMethods1.UTF8TEST(Value: string): string;
var metaData: TDSInvocationMetadata;
output: String;
begin
metaData:= GetInvocationMetadata;
output:= '<element><inside name="skúška" /></element>';
metaData.ResponseCode:= 200;
metaData.ResponseContentType:= 'text/xml; charset=utf-8';
metaData.ResponseContent:= utf8encode(output);
end;

从互联网浏览器调用后:http://localhost:8080/datasnap/rest/TServerMethods1/UTF8TEST我收到编码错误报告。删除特殊字符“úš”并将名称仅设置为“skuska”后,evrythink 似乎没问题。

任何人都可以帮助如何获得正确的 UTF8 编码输出???

最佳答案

经过几个小时的测试和搜索,我终于找到了一种使用 Datasnap REST 服务器生成正确的 UTF8 XML 输出的方法:

Function StringToStream(const AString: string): TStream;
var utf8: utf8string;
begin
utf8:= utf8encode(AString);
Result:= TStringStream.Create(utf8);
end;

function TServerMethods1.UTF8TEST(Value: string): TStream;
var metaData: TDSInvocationMetadata;
output: String;
begin
metaData:= GetInvocationMetadata;
output:= '<element><inside name="skúška" /></element>';
metaData.ResponseCode:= 200;
metaData.ResponseContentType:= 'text/xml; charset=utf-8';
//metaData.ResponseContent:= output;
result:= StringToStream(output);
end;

解决方案是使用TStream发送UTF8编码的字符串,而不是直接将其写入metaData.ResponseContent(始终为UNICODE - UTF16编码)...

关于rest - Delphi XE3 - datasnap REST 服务器 UTF8 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925365/

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