我有一个带有nvarchar数据的MS SQL Server数据库,特别是一个带有"★ABC★"的数据字段。在里面。我的Delphi桌面应用程序显示它很好,但是我在Delphi XE4中的WebBroker应用程序使用TDataSetTableProducer生成响应的相同数据不起作用。以下是裸骨样本代码:
procedure TWebModule1.WebModule1TestAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.ContentEncoding := 'text/plain; charset="UTF-8"';
Response.Content := '<!DOCTYPE html>'
+ '<html>'
+ '<body>'
+ '<p> ★ABC★ </p>'
+ '</body>'
+ '</html>'
end;
在网络浏览器中查看时,结果为&#34;?ABC?&#34;。我尝试了很多东西(包括UTF-16和用Char($ FEFF)作为响应的前缀),但没有任何帮助。什么是正确的方法?
答案 0 :(得分:4)
'text/plain; charset="UTF-8"'
不是Response.ContentEncoding
属性的有效值。您需要将其放在Response.ContentType
属性中:
Response.ContentType := 'text/plain; charset="UTF-8"';
如果浏览器仍然无法正确显示数据,则可能必须使用Response.ContentStream
属性而不是Response.Content
属性,因此您可以自己编码UTF-8数据:< / p>
procedure TWebModule1.WebModule1TestAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.ContentType := 'text/plain; charset="UTF-8"';
Response.ContentStream := TStringStream.Create(
'<!DOCTYPE html>'
+ '<html>'
+ '<body>'
+ '<p> ★ABC★ </p>'
+ '</body>'
+ '</html>',
TEncoding.UTF8);
end;