Delphi xe2中的备忘录不';t正确显示ansi字符集中存储的umlaut字符

Delphi xe2中的备忘录不';t正确显示ansi字符集中存储的umlaut字符,delphi,character-encoding,fonts,delphi-xe2,tmemo,Delphi,Character Encoding,Fonts,Delphi Xe2,Tmemo,我们在Delphi2007中有一个应用程序,它将备忘录的内容写入文本文件并将其加载回。 TMemo字符集设置为AnisCharSet,并且在项目选项-->应用程序中启用运行时主题已关闭。 加载的内容类似于包含umlaut字符的“möglich”。 该应用程序在Delphi2007中运行良好,它将文本文件写入并读回,并正确显示内容。 在写入文件时,memo会将umlaut字符串转换为类似于“mцchten”的格式,当memo加载回它时,它会正确地显示它 现在我们已经将同一个应用程序升级到delph

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

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

有人能建议如何在delphi xe2应用程序中正确显示umlaut字符吗。只是memo的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
对象。

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


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

我在将应用程序从D7迁移到XE2时遇到了类似的问题。在我的例子中,问题是在dfm转换过程中,控件被赋予了一些奇特的字体。也许这里就是这样。你查过文件了吗?是否在系统默认ANSI代码页中正确编码?您可以向XE2中的SaveToFile和LoadFromFile方法添加一个TEncoding参数。@JensMühlenhoff:为了保持与早期版本的向后兼容性,
tString
默认为
TEncoding。如果您不指定自己的
TEncoding
,则默认为
。早期版本将操作系统默认的Ansi代码页用于读/写数据
TEncoding.Default
也会这样做。@RemyLebeau:我知道它应该是现成的,我只是想确保D2007应用程序正确写入了该文件。@RemyLebeau:不
TStrings.LoadFromFile
尝试使用
TEncoding
检测编码,但您没有明确指定它?我在将应用程序从D7迁移到XE2时遇到了类似的问题。在我的例子中,问题是在dfm转换过程中,控件被赋予了一些奇特的字体。也许这里就是这样。你查过文件了吗?是否在系统默认ANSI代码页中正确编码?您可以向XE2中的SaveToFile和LoadFromFile方法添加一个TEncoding参数。@JensMühlenhoff:为了保持与早期版本的向后兼容性,
tString
默认为
TEncoding。如果您不指定自己的
TEncoding
,则默认为
。早期版本将操作系统默认的Ansi代码页用于读/写数据
TEncoding.Default
也会这样做。@RemyLebeau:我知道它应该是开箱即用的,我只是想确保D2007应用程序正确写入了该文件。@RemyLebeau:不
TStrings.LoadFromFile
在没有明确指定的情况下,尝试使用
TEncoding
检测编码?