1

我们在 delphi 2007 中有一个应用程序,它将备忘录的内容写入文本文件并将其加载回来。TMemo 字符集设置为 AnisCharSet 并在项目选项中启用运行时主题 --> 应用程序已关闭。加载的内容类似于“möglich”,其中包含变音符号。此应用程序在 delphi 2007 中运行良好,它写入文本文件并将其读回并正确显示内容。在写入文件备忘录时,会将元音变音字符串转换为像这样的“mцchten”,当备忘录将其加载回来时,它会正确显示它。

现在我们将相同的应用程序升级到delphi xe2,在这里,当备忘录从文件中加载文本时,它没有正确显示它,即不是将变音符号字符串显示为“möglich”,而是显示“mцchten”,转换是在 delphi xe2 中显示变音符号时似乎不会发生在 delphi 2007 中发生的情况。

有人可以建议如何在delphi xe2应用程序中正确显示变音符号。它只是 memo 的 savetofile 和 loadfromfile 选项,没有任何编码。在 Xe2 中启用运行时主题已关闭,并且 memo 的字体字符集仍然是 Ansi。

这里的问题是从使用 delphi 2007 应用程序保存的 delphi xe2 应用程序中的文本文件中加载和显示字符

4

1 回答 1

4

元音变音在 Ansi 环境(如 D2007)中对代码页敏感,因此需要在 Unicode 环境(如 XE2)中进行额外处理。因此,最好使用与代码页无关的格式来读取/写入数据,例如 UTF-8。特别是如果数据必须从一台 PC 移动到另一台 PC,操作系统默认的 Ansi 代码页可能会有所不同。

在这种特殊情况下,您可能必须找出 D2007 代码保存数据时操作系统正在使用的特定代码页(因为它会使用操作系统默认的 Ansi 代码页),然后明确告诉 XE2 代码使用该代码页读取数据时相同的代码页。在 XE2 中,TStrings.LoadFrom...()方法有一个可选TEncoding参数。您可以使用该TEncoding.GetEncoding()方法获取TEncoding特定代码页的对象。

于 2013-01-31T18:23:58.427 回答