delphi 2009 unicode + ansi问题

标签 delphi unicode delphi-2009 isapi

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

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

出了什么问题?

最佳答案

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

如您所知,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,即小端 UTF-16。

关于delphi 2009 unicode + ansi问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1201701/

相关文章:

winforms - 如何在 WinForms 应用程序中使用 Delphi (2007) 控件?

postgresql - 替换 PostgreSQL 中的 unicode 字符

Delphi 2009 函数被链接器消除

delphi - 在Delphi 2009中使用泛型和匿名方法有什么问题?

Delphi 2009 TurboPower 库转换

Delphi XE6 带有不可见项目的样式菜单问题

delphi组件属性: TObjectList<TPicture>

delphi - Delphi 6 上的简单组合框问题

c - glib gunichar 和 wchar_t 之间有什么区别,哪个更适合跨平台解决方案?

javascript - 用于匹配所有单词的正则表达式,包括标点符号和 unicode 字符。没有空白