我正在将isapi(pageproducers)应用程序从delphi 7移植到delphi 2009,这些页面基于UTF8中的html文件。

一切顺利,除非Onhtmltag被触发,我用任何值替换带有特殊字符的透明标签,如重音字符(áé ...)这些字符在输出中用&#替换65533;字符。

怎么了?

有帮助吗?

解决方案

作为调试过程的一部分,您应该确切地找出浏览器为问号字符接收的字节值。

正如您所知,Delphi 2009的字符串类型是Unicode,而以前的所有版本都是ANSI。 Delphi 7引入了 Utf8String 类型,但Delphi 2009使该类型特殊。如果您没有使用该类型来保存编码为UTF-8的字符串,那么您应该开始这样做。当您将一个值分配给另一个时, Utf8String 变量中保存的值将自动转换为 UnicodeString 值。

如果您将UTF-8编码的字符串存储在普通的 AnsiString 变量中,那么如果将它们分配给 UnicodeString,它们将使用默认系统代码页转换为Unicode 。那不是你想要的。

如果要将UTF-8编码的文字分配给 string 类型的变量,请停止该操作。该类型期望其值被编码为UTF-16,就像 WideString 一样。

如果您使用 LoadFromFile 将文件加载到 TStrings 后代,那么您需要开始使用该方法的第二个参数,该参数告诉它使用什么编码。 UTF-8编码的文件应使用 TEncoding.UTF8 。默认值为 TEncoding.Unicode ,它是little-endian UTF-16。

其他提示

这可能是字符编码问题。

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

您可能需要在这些编码之间进行一些音译。 为此,您需要找出准确使用的编码(例如 Rob )。

或恢复为HTML转义重音字符(如 Ralph 提及)

你能发布一个显示问题的小应用吗? (你可以给我发电子邮件,关于用户名中有jeroen的任何内容,域名中的pluimers.com将到达我的邮箱)。

- 的Jeroen

感谢您的帮助,经过一些测试,问题非常简单(或愚蠢)

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

无需在unicodestring utf8string ansistring widestring之间手动翻译。 Delphi 2009字符串使用接近完美。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top