在Delphi中将非ASCII字符转换为WebBroker响应

时间:2015-03-16 01:15:55

标签: delphi utf-8 delphi-xe4 webbroker

我有一个带有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)作为响应的前缀),但没有任何帮助。什么是正确的方法?

1 个答案:

答案 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;