delphi 2009 unicode + ansi问题

时间:2009-07-29 17:04:35

标签: delphi unicode delphi-2009 isapi

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

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

怎么了?

3 个答案:

答案 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字符串使用接近完美。