当编码未知时,在osx上使用firemonkey将文本文件加载到stringlist中

时间:2017-01-20 12:42:02

标签: delphi encoding firemonkey

当文本文件的编码未知时,我很难将文本文件加载到osx上的firemonkey中的字符串列表中。

当我只使用list.loadfromfile(filename)时,我大部分时间都会遇到有关编码的异常。

当文件在ansi中时,

list.loadfromfile(filename,TEncoding.unicode)也将失败。

在Windows上没有问题,list.loadfromfile(filename)正常工作,但在osx上没有。

我无法指定编码,因为它将是未知的(用户提供文本文件)。

在mac上运行应用程序时,我是如何解决这个编码问题的?

1 个答案:

答案 0 :(得分:2)

一般情况下,这是不可能的。在所有常见编码中解释时,很有可能创建一个有效的单个文件。这已经多次讨论过,例如:The Notepad file encoding problem, redux

我假设您正在使用不包含字节顺序标记,BOM的文件。显然,如果您的输入文件包含BOM,那么您只需检查BOM并完成。

根据这个假设,在一个完美的世界中,问题的正确解决方案是知道编码。选择程序所需的特定编码,或者安排用户在提供文件时告诉您编码。

如果出于某种原因,你不能这样做,那么接下来最好的办法是使用启发式方法来尝试猜测所使用的编码。我不知道有任何Pascal代码可以做到这一点。但是你应该能够把一些合理的东西放在一起。这个答案给出了基本策略的概述:https://stackoverflow.com/a/20747074