代码之家  ›  专栏  ›  技术社区  ›  Heinrich Ulbricht

在ini文件中存储Unicode字符串时,是否存在与编码相关的问题?

  •  1
  • Heinrich Ulbricht  · 技术社区  · 14 年前

    已经有关于unicode和ini文件的问题,但其中许多都是特定于域的。所以我不确定这个答案是否适用于一般情况。

    动机 :我想使用ini文件来存储一些简单的数据,比如一些数字和字符串。字符串由用户提供(通过GUI输入)。该软件可以在世界任何地方运行,任何语言都可以使用。这些文件也可以在用户之间共享(这样他们可以在一个系统上写入,在另一个系统上读取等等)。

    我认为在in i文件中使用unicode应该没有问题 GetPrivateProfileStringW WritePrivateProfileStringW (我的目标是系统>=Windows XP)。

    但后来我偶然发现了一个答案 this question .

    报价:

    writeprivateprofileStringw函数将以旧系统编码(例如,日本系统上的shift-jis)写入ini文件,因为它是旧支持函数。如果要有一个完全启用Unicode的ini文件,则需要使用外部库。

    我现在不确定-我需要担心吗?或者我可以继续使用ini文件吗?

    编辑:

    避免随机编码的关键可能是准备一个包含BOM的空文件,然后使用这个文件。有人(正面/负面)对此有经验吗?

    2 回复  |  直到 10 年前
        1
  •  2
  •   Frédéric Hamidi    14 年前

    问题不在于使用 ini 文件,但使用这些文件的读写功能。

    正如你注意到的, WritePrivateProfileStringW() 不会写 UNICODE 数据到文件。相反,它将使用系统中标准的任何多字节编码。那意味着 伊尼 在日文系统上创建的文件在俄文系统上不可读。反过来也一样。

    如果不同编码的系统不打算共享这些文件,您就可以了。否则,也许你不应该使用 伊尼 文件,但更多 统一码 -感知技术,例如 XML ,其编码默认为 UTF-8 在所有平台上。

        2
  •  1
  •   Community CDub    11 年前

    答案是:是的,根据文件是否已经存在以及(如果存在的话)其内容的编码方式,可能会有问题。

    如果ini文件的内容已经是unicode,则将其视为unicode。在内部,这似乎是由 IsTextUnicode 功能。对于这个函数,文件中正确的BOM可以作为Unicode的一个重要提示。因此,仅通过使用writeprivateprofilestringw,您不能确保将unicode写入ini文件,而是必须准备该文件。

    来源: Michael Kaplan's Blog