在 MacOS 上打开 INI 文件时出现 Unicode 映射错误

Unicode mapping Error while opening INI files on MacOS

我正在尝试使用 TIniFile:

在 Mac OSX 上打开一个 INI 文件
SettingsFile := TIniFile.Create(aINIFileName);   //Ini vertion
Try
  iUpdateMaj := SettingsFile.ReadInteger('CurrentVersion', 'Maj', 0);
  iUpdateMin := SettingsFile.ReadInteger('CurrentVersion', 'Min', 0);
  iUpdateRel := SettingsFile.ReadInteger('CurrentVersion', 'Rel', 0);
Finally
  SettingsFile.Free;
End;

我得到的确切错误是:

(EEncodingError) No mapping for the Unicode character exists in the target multi-byte code page.

这在 Yosemite 之前工作正常,但自 El Capitan 以来它不再工作。

根据我所做的研究,问题与 Unicode 编码有关。我知道用记事本创建的 INI 文件是用 UTF-8 编码的,TIniFile 在内部使用 TStrings

有谁知道我该如何解决这个问题?

如果您的 .ini 文件是 UTF-8 编码的并且包含有效的 UTF-8 数据,您的代码看起来非常完美。我不知道你的文件里面有什么,但看起来你的 .ini 文件不包含有效的 UTF-8 数据。

所以您必须找到您的 .ini 文件使用的编码。如果您的 .ini 文件是 ANSI,那么您可以这样打开它:

SettingsFile := TIniFile.Create(aINIFileName, TEncoding.ANSI);

这对我来说非常有效:

如果您的 .ini 文件是 UTF-8 编码的并且包含有效的 UTF-8 数据,那么您的代码看起来非常完美。我不知道你的文件里面有什么,但看起来你的 .ini 文件不包含有效的 UTF-8 数据。

所以您必须找到您的 .ini 文件使用的编码。如果您的 .ini 文件是 ANSI,那么您可以这样打开它:

设置文件 := TIniFile.Create(aINIFileName, TEncoding.ANSI);