datasnap REST服务器UTF8输出
我正在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我得到了ENCODING ERROR报告。 删除特殊字符'úš'并将名称设置为'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编码)...
链接地址: http://www.djcxy.com/p/91059.html