Delphi XE7,WebBroker 上 PageProducer 的 Unicode 显示问题

Delphi XE7,Unicode display problems with PageProducer on WebBroker

我正在编写一个多语言 WebBroker 应用程序(适用于 Apache 2.2),它显示来自 oracle 数据库的 unicode 编码数据。在用 Delphi XE7 编写的测试程序中,具有相同数据感知组件(Devart 的 ODAC)的相同数据显示正确。 我的问题出现在 WebBroker 中,当我使用 PageProducer 准备响应内容时,我遇到了一个奇怪的行为 当我在操作中使用以下代码时:

Response.ContentType := 'text/html; charset=UTF-8';
PageProducer1.HTMLFile:= htmltemplate
Response.Content := 
  PageProducer1.Content+
  'Label 1 ='+Label1fromDB+
  ' Label 2='+Label2fromDB+
  '</body></html>';
Response.SendResponse;

Web 浏览器中的结果是所有非拉丁字符不是由 PageProducer 插入但已经存在于 html 模板文件中(已声明为 utf-8 with )被其他不正确的字符替换,由 PageProducer 插入并从数据库中检索的文本也没有正确显示,但是添加到内容响应中的额外标签 Label1fromDB 和 Label2fromDB 如上面的代码所示正确显示,并且具有与内部相同的字符html模板。

现在,当我省略声明时

Response.ContentType := 'text/html; charset=UTF-8'

html 模板的内容显示正确,但所有其他文本、PageProducer 填充的文本以及两个标签 Label1fromDB 和 Label2fromDB 显示不正确

你能帮我确定问题出在哪里吗?我做了什么才能通过网络代理提供 unicode 多语言内容?

您遇到了不同 Unicode 编码的问题。

PageProducer.ContentResponse.Content都是UTF16编码的字符串。您的 htmltemplate 编码为 UTF8PageProducer 未正确解释。

最可能的原因是 htmltemplate 文件开头没有 UTF8 BOMPageProducer 会将文件编码解释为默认 ANSI。如果是这样,添加 UTF8 BOM 应该可以解决您的问题。