1

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

一切都很顺利,除了 Onhtmltag 被触发并且我用任何带有特殊字符(如重音字符(áé...))的值替换透明标签时,这些字符在输出中被替换为 � 字符。

怎么了?

4

3 回答 3

4

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

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

如果您将 UTF-8 编码的字符串存储在普通AnsiString变量中,那么如果您将它们分配给UnicodeString. 那不是你想要的。

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

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

于 2009-07-29T17:37:26.747 回答
0

这可能是字符编码问题。

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

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

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

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

——杰伦

于 2009-07-30T09:02:58.503 回答
0

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

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

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

于 2009-07-30T12:06:21.940 回答