2009-07-29 91 views
1

我将一个isapi(pageproducers)应用程序从delphi 7移植到delphi 2009,这些页面基于UTF8中的html文件。delphi 2009 unicode + ansi问题

除了当Onhtmltag被触发时,我会用一些特殊字符(如重音字符)替换透明标记(áé...),这些字符在输出中用 字符替换。

怎么了?

回答

4

作为调试过程的一部分,您应该确切了解浏览器收到的问号字符的字节值。你应该知道,Delphi 2009的字符串类型是Unicode,而以前的所有版本都是ANSI。德尔福7引入了Utf8String类型,但德尔福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。

+0

+1,希望我能给+2。紧凑且信息丰富。 – Argalatyr 2009-07-30 00:04:48

0

这可能是一个字符编码问题。

Delphi IDE通常使用Windows-1252或UTF-16编码源代码。 HTML通常使用UTF-8。

这些编码之间可能需要一些音译。 为此,您需要了解哪些编码完全使用(如Rob提及)。

或恢复到HTML中分离重音的字符(如Ralph提到)

你可以发布一个小的应用程序,说明什么问题? (你可以给我发电子邮件,关于用户名中有jeroen的任何内容,并且域名中的pluimers.com将到达我的邮箱)。

--jeroen

0

感谢你的帮助,经过一番测试,问题是非常非常简单的(或愚蠢也)

response.contenttype := 'text/html charset=UTF-8' 

没有必要的UnicodeString UTF8字符串WideString的AnsiString类型之间进行手动转换。德尔福2009年的字符串使用率接近完美。