【问题标题】:Unicode / Non-Unicode / UTF-8 ProblemsUnicode / 非 Unicode / UTF-8 问题
【发布时间】:2010-12-26 05:52:09
【问题描述】:

我正在开发的一个应用程序将数据存储在一个 INI 文件中。该应用程序创建了 INI 文件,而该文件又将被我们创建的另一个应用程序读取。 INI 文件也可以手动编辑。

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

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

现在的问题 - 我们去寻找一个 INI 文件解析器而不是创建我们自己的。 Boost 属性树似乎很理想,但似乎 BOM 没有被底层 wifstream 过滤掉,最终属性树因此抛出异常。

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

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

更新:

我现在有这个工作。 BOM 不是问题。这是因为数据不是以 UTF8 存储的。谢谢……

【问题讨论】:

    标签: windows unicode mfc


    【解决方案1】:

    使用删除 BOM 的文本编辑器,例如 Notepad++。
    去掉 BOM 没有问题,这是 Web 开发中常见的解决方案。

    【讨论】:

    • 我们无法控制最终用户为 INI 文件使用的文本编辑器。
    • 然后尽可能使用删除它们的脚本。建议最终用户应该使用哪种文本编辑器。
    【解决方案2】:

    您是否有任何理由不使用本机 Windows API 来读取和写入配置文件?使用本机 API 应确保两个应用程序一致地获取数据,因为它们将使用完全相同的 API。

    【讨论】:

    • 是的,但我们无法控制最终用户将哪个文本编辑器用于 INI 文件。
    【解决方案3】:

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

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

    如果这是一个 Windows 应用程序,你真的应该切换到注册表。否则,XML 就是要走的路。

    【讨论】:

    • 谢谢。无法使用注册表。 Ini 文件是在管理员电脑上创建并在最终用户电脑上处理的 Cfg 文件。
    • 有多种方法可以部署注册表更改。您可以在应用程序的安装包中执行此操作。或者在 Intranet 中,IT 可以将注册表更改部署到 PC。
    猜你喜欢
    • 2018-06-17
    • 2014-08-21
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2014-02-13
    相关资源
    最近更新 更多