1

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

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

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

但后来我偶然发现了这个问题的答案。

引用:

WritePrivateProfileStringW 函数将以遗留系统编码(例如,日本系统上的 Shift-JIS)写入 INI 文件,因为它是遗留支持函数。如果你想要一个完全支持 Unicode 的 INI 文件,你需要使用一个外部库。

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

编辑:

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

4

2 回答 2

1

问题不在于ini文件的使用,而在于您将用于读取和写入这些文件的函数。

如您所见,WritePrivateProfileStringW()不会将UNICODE数据写入文件。相反,它将使用系统上标准的任何多字节编码。这意味着ini在日文系统上创建的文件将无法在俄文系统上读取。反之亦然。

如果文件不打算由具有不同编码的系统共享,那么您会没事的。否则,也许您不应该使用ini文件,而是使用一种更具有UNICODE感知能力的技术,例如XML,其编码默认适用UTF-8于所有平台。

于 2010-10-20T09:34:44.127 回答
1

答案是:是的,可能存在问题,具体取决于文件是否已经存在以及(如果存在)其内容的编码方式。

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

资料来源:迈克尔·卡普兰的博客

于 2012-02-22T08:40:51.760 回答