在项目部署过程中,突然发现GetPrivateProfileXXX
相关函数全部操作失败,错误码:2。
但是可以肯定该ini文件是100%存在的,为什么呢?经过对比发现该文件格式由utf-8
变为utf-8-bom
。当再次将ini格式切换为utf-8之后一切由恢复正常。
结论:
GetPrivateProfileXXX
函数不支持utf-8-bom
编码的格式文件。
分析:
utf-8-bom
在utf-8
文件头部增加了三个字节:0xEF, 0xBB, 0xBF
标记该文件为utf-8-bom
。后面内容和utf-8文件保持一致。
解决方案
- 方案一:以
rb
模式读取ini文件,如果ini文件前面三个字节为0xEF, 0xBB, 0xBF
则舍弃前面三个字节的内容,将文件另存为ini,之后读取新文件ini。 - 方案二:读取ini文件内容,然后按照ini格式,解析文件内容。(可参考
hv/iniparser
)