xe2中的备注无法正确显示存储在ansi charset中的变音字符

时间:2013-01-31 11:03:12

标签: delphi character-encoding fonts delphi-xe2 tmemo

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

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

有人可以建议在delphi xe2应用程序中正确显示变音符号可以做些什么。它只是备忘录的savetofile和loadfromfile选项,无需任何编码即可使用。在Xe2中,启用运行时主题,并且备忘录的字体字符集仍然是Ansi。

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

1 个答案:

答案 0 :(得分:4)

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

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