【发布时间】:2016-09-23 21:31:45
【问题描述】:
我正在尝试使用 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) 目标多字节代码页中不存在 Unicode 字符的映射。
这在优胜美地之前工作得很好,但自从 El Capitan 之后就不再工作了。
根据我所做的研究,问题与 Unicode 结束有关。我知道用记事本创建的INI文件是用UTF-8编码的,TIniFile内部使用TStrings。
有人知道如何解决这个问题吗?
【问题讨论】:
-
哪一行具体失败了?问题是否与打开具有 Unicode 文件名的 INI 文件或使用 UTF-8 数据从 INI 读取值有关?它有很大的不同吗?抛出错误时调用堆栈是什么样的?到目前为止,您为自己调试做了哪些工作?
-
它在 .create 行失败,更深入,它在:List.Text := FEncoding.GetString(Buffer, Size, Length(Buffer) - Size); System.IniFiles 中的 TMemIniFile.LoadValues proc 中的行,在 TEncoding.GetString 中,我可以看到由于 ByteCount
标签: macos delphi unicode firemonkey-fm3