delphi - xe2 中的备忘录无法正确显示存储在 ansi 字符集中的元音变音字符

标签 delphi character-encoding fonts delphi-xe2 tmemo

我们在 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 中,启用运行时主题已关闭,并且备忘录的字体字符集仍然是 Ansi。

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

最佳答案

变音符号在 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/

相关文章:

mysql - FireDAC 在查询期间丢失与 MySQL 服务器的连接

delphi - 如何在delphi 10中使用带有idhttp的线程

php - MySQLi 的编码问题

grails - 如何将字体 .ttf 文件添加到 grails 项目

java - 如何在 Java 中设置标签(彩色文本)的颜色?

html - 谷歌字体不会加载 html

delphi - 如何在对象检查器中查看属性的类型?

string - 使用 Unicode Delphi 调用 DLL 时出错

haskell - 将文本转换为 Unicode 转义序列

java - Websphere 6.1 UTF-8 编码的 URL 参数