简述:
如果要多平台兼容,这个 ini 文件必须是 UTF8 编码,否则如果这个 ini 文件里面有中文,安卓下会乱套。
问题:
TIniFile 在 WINDOWS 平台下,封装的是 WINDOWS 提供的接口。在 System.IniFiles 里面有注释:TIniFile - Encapsulates the Windows INI file interface (Get/SetPrivateProfileXXX functions)
经过测试,TIniFile 在 WINDOWS 环境下只能处理 ANSI 编码的文件。UTF16 和 UTF8 编码的都处理不了,中文会出乱码。
解决方法:
为了统一 WINDOWS 和安卓的代码,以及 INI 文件本身,把 INI 文件的编码做成 UTF8 -- 带 BOM 的 UTF8 文件。
而处理它的 INI ,采用 TMemIniFile ,实测可以解决编码和中文乱码的问题:
Ini := TMemIniFile.Create(MY_INI_FILE, TEncoding.UTF8);
又:
采用 TMemIniFile 要注意一个问题:写入后,默认不会自动保存到文件。
加上:
ini.AutoSave := True;
解决。