我正在将isapi(pageproducers)应用程序从delphi 7移植到delphi 2009,这些页面基于UTF8中的html文件。
一切顺利,除非Onhtmltag被解雇,我用任何带有特殊字符的字符替换透明标签,如重音字符(áé...)这些字符在输出中用 字符替换。
怎么了?
答案 0 :(得分:4)
作为调试过程的一部分,您应该确切地找出浏览器为问号字符接收的字节值。
正如您所知,Delphi 2009的字符串类型是Unicode,而以前的所有版本都是ANSI。 Delphi 7引入了Utf8String
类型,但Delphi 2009使该类型特殊。如果您没有使用该类型来保存编码为UTF-8的字符串,那么您应该开始这样做。 Utf8String
个变量中保存的值会在您将一个变量分配给另一个时自动转换为UnicodeString
值。
如果您将UTF-8编码的字符串存储在普通AnsiString
变量中,那么如果您将它们分配给UnicodeString
,它们将使用默认系统代码页转换为Unicode。那不是你想要的。
如果要将UTF-8编码的文字分配给string
类型的变量,请停止该操作。该类型期望其值被编码为UTF-16,就像WideString
总是一样。
如果要将文件加载到TStrings
后代LoadFromFile
,则需要开始使用该方法的第二个参数,该参数告诉它使用哪种编码。 UTF-8编码的文件应使用TEncoding.UTF8
。默认值为TEncoding.Unicode
,这是小端UTF-16。
答案 1 :(得分:0)
这可能是字符编码问题。
Delphi IDE通常使用Windows-1252或UTF-16编码源代码。 HTML通常使用UTF-8。
您可能需要在这些编码之间进行一些音译。 为此,您需要找出准确使用的编码(如Rob提及)。
或恢复为HTML转义重音字符(如Ralph提及)
你能发布一个显示问题的小应用吗? (你可以给我发电子邮件,关于用户名中有jeroen的任何内容,域名中的pluimers.com将到达我的邮箱)。
- 的Jeroen
答案 2 :(得分:0)
感谢您的帮助,经过一些测试,问题非常简单(或愚蠢)
response.contenttype := 'text/html charset=UTF-8'
无需在unicodestring utf8string ansistring widestring之间手动翻译。 Delphi 2009字符串使用接近完美。