我们在delphi 2007中有一个应用程序,可将备忘录的内容写入文本文件,然后将其加载回去。
TMemo字符集设置为AnisCharSet,并在项目选项->应用程序中关闭了启用运行时主题。
加载的内容类似于“möglich”,其中包含变音符号。
该应用程序在delphi 2007中可以正常工作,它可以写入文本文件,然后将其读回并正确显示内容。
在写入文件备忘录时,将变音符字符串转换为这样的“mцchten”,并在备忘录重新加载时正确显示它。
现在我们已经将相同的应用程序升级到了delphi xe2,在这里,当备忘录从文件中加载文本时,它无法正确显示文本,即不是将变音字符串显示为“möglich”,而是显示了“mцchten”,即在delphi xe2中显示变音符号时,似乎不会发生在delphi 2007中。
有人可以建议在delphi xe2应用程序中如何正确显示变音符号。这只是备忘录的savetofile和loadfromfile选项,无需任何编码。在Xe2中,关闭运行时主题,并且备忘的字体字符集仍为Ansi。
这里的问题是在delphi xe2应用程序中加载并显示文本文件中的字符,该文件是使用delphi 2007应用程序保存的
最佳答案
Umlauts在Ansi环境(例如D2007)中对代码页敏感,因此需要在Unicode环境(例如XE2)中进行额外的处理。因此,最好使用与代码页无关的格式来读取/写入数据,例如UTF-8。尤其是当数据必须从一台PC移到另一台PC时,操作系统默认的Ansi代码页可能会有所不同。
在这种特殊情况下,您可能必须找出D2007代码保存数据时操作系统正在使用的特定代码页(因为它将使用操作系统默认的Ansi代码页),然后明确地告诉XE2代码使用该代码页。读取数据时使用相同的代码页。在XE2中,TStrings.LoadFrom...()
方法具有可选的TEncoding
参数。可以使用TEncoding.GetEncoding()
方法来获取特定代码页的TEncoding
对象。
关于delphi - xe2中的备注不能正确显示存储在ansi字符集中的变音符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14624184/