windows - Unicode/非 Unicode/UTF-8 问题

标签 windows unicode mfc

我正在处理的应用程序将数据存储在 INI 文件中。该应用程序创建 INI 文件,该文件将由我们创建的另一个应用程序读取。 INI 文件也可以手动编辑。

INI 文件可能迟早会包含不同的语言,因此我们小心翼翼地确保该文件中使用的所有数据均为 unicode 格式。

最初创建 INI 文件后,我们在记事本中检查了该文件,发现字母间距被搞砸了。经过一些研究,我们发现了 Unicode 字节顺序标记 (BOM) FF FE 并在文件的开头开始编写它,一切似乎都很好 - 文件已正确创建并且可以手动编辑在记事本中。

现在是问题 - 我们一直在寻找 INI 文件解析器,而不是创建我们自己的解析器。 Boost property Tree 看起来很理想,但 BOM 似乎没有被底层 wifstream 过滤掉,最终 property tree 会因此抛出异常。

接下来我们尝试了 SimpleINI link text但 simpleINI (CSimpleIniW) 似乎不起作用,除非 UTF-8 标记位于文件的开头。

到目前为止,2 个看似开发良好的 INI 文件处理器无法处理我们简单的 INI 文件,因此我们开始认为我们采用了错误的方法。除了显而易见的“应该使用 XML”之外,对于这个问题,您还能提供哪些现实世界的建议?

更新:

我现在有这个工作。 BOM 不是问题所在。这是因为数据没有以 UTF8 格式存储。谢谢....

最佳答案

如果您打算在 INI 文件中使用 Unicode,则需要 BOM。如果没有 BOM,读者就不知道它使用的是哪种编码。它可能是 UTF-16(大/小端)或 UTF-8。这是 INI 文件的一大缺点。 XML 有一个可见的序言,您可以指定编码并且更容易处理。

我们使用 GetPrivateProfileStringW 读取 UTF-8 格式的 INI 文件,只要 BOM 存在就没有发现任何问题。

如果这是一个 Windows 应用程序,您真的应该切换到注册表。否则,XML 是必经之路。

关于windows - Unicode/非 Unicode/UTF-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897710/

相关文章:

java - 启动嵌入式 Tomcat 并从命令行打开浏览器

windows - 找不到包 "gopkg.in/validator.v2"错误

c++ - C++中的字符串和字符编码

mfc - 错误 C2039 : “SetDefaultDllDirectories” :is not a member of global namespace

android - 真正实时流式传输到 Android/iPhone

python - 使用 Python 3.2 从头开始​​创建 Unicode XML

c++ - C++ 库中的文件打开接口(interface)应该在 Windows 上使用 UTF-8 吗?

visual-c++ - 如何在 VC++ 中将两个资源合并到一个项目中?

c++ - CMap - 如果我们向映射添加的元素多于哈希表大小,会发生什么?

windows - 如何使用 VBScript 指定远程桌面连接的地址?