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

时间:2015-01-28 12:06:59

标签: delphi unicode delphi-xe7

我正在编写一个多语言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;

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

现在,当我省略声明

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

htmltemplate的内容是正确的diplaying但所有其他文本,由PageProducer填充的文本和两个标签Label1fromDB和Label2fromDB不正确

为了能够通过网络经纪人提供unicode多语言内容,您能否帮我确定问题所在以及我该怎么做?

1 个答案:

答案 0 :(得分:0)

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

PageProducer.ContentResponse.Content都是UTF16个编码字符串。您的htmltemplate编码在UTF8中,PageProducer未正确解释。

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