【发布时间】:2010-09-17 06:47:17
【问题描述】:
使用WritePrivateProfileString 和GetPrivateProfileString 会产生??? 而不是真实字符。
【问题讨论】:
使用WritePrivateProfileString 和GetPrivateProfileString 会产生??? 而不是真实字符。
【问题讨论】:
这可能只是您如何显示或处理字符串的问题。 例如,普通的控制台窗口不能用 printf 显示日文字符串。
你能发布一些你的代码吗?
【讨论】:
根据WritePrivateProfileString 文档,有一个Unicode 版本:WritePrivateProfileStringW。使用它,您应该能够使用 Unicode 字符。
【讨论】:
WritePrivateProfileStringW 以 ASCII 编码创建新文件,但如果以前创建过具有此编码的文件,则通常使用 UTF-16LE。
WritePrivateProfileStringW 函数将以旧系统编码(例如日文系统上的 Shift-JIS)写入 INI 文件,因为它是旧支持函数。如果你想要一个完全支持 Unicode 的 INI 文件,你需要使用一个外部库。
试试 SimpleIni http://code.jellycan.com/simpleini/
它是 C++,单个头文件,具有 MIT 许可证的模板库(即商业用途是可以的)。将其包含到您的源文件中并使用它。它是跨平台的,支持UTF-8和legacy编码文件,可以读写INI文件,很大程度上保留了cmets和结构等。最容易查看页面。
它已经存在了一段时间,并且似乎被相当多的人使用。我写了它并继续支持它。
【讨论】:
GetPrivateProfileString() 和 WritePrivateProfileString() 可以与 Unicode 一起使用。
如果 ini 文件是 UTF-16LE 编码的,即它有一个 UTF-16 BOM,那么这些函数将以 Unicode 工作。但是,如果函数必须创建文件,它们将创建一个 ANSI 文件,并且只能在 ANSI 中工作。
因此,要使用 Unicode 函数,请在首次使用之前创建您的 ini 文件,并向其写入 UTF-16LE 字节顺序标记。然后照常进行。
请注意,函数根本不适用于 UTF-8。
请参阅Michael Kaplan's blog 了解比您想知道的更多详细信息。
【讨论】: