我面临一个小问题。我来自使用语言扩展字符集的国家(特别是拉丁语扩展-A由于š,č,ť,ý,á等字符)。
我有包含这些字符的ini文件,我想将它们读入程序。不幸的是,它无法使用getPrivateProfileStringW或... A。
以下是源代码的一部分。我希望它能帮助某人找到解决方案,因为我有点绝望了。 : - )
消息来源代码:
wchar_t pcMyExtendedString[200];
GetPrivateProfileStringA(
"CATEGORY_NAME",
"SECTION_NAME",
"error",
pcMyExtendedString,
200,
PATH_TO_INI_FILE
);
INI文件:
[CATEGORY_NAME]
SECTION_NAME= ľščťžýáíé
字符ý,á,í,é正确呈现 - 它们来自字符集 Latin-1 Supplement 。它们的hexa值是正确的(0xFD,0xE1,0xED,......)。
字符ľ,š,č,ť,ž被错误地加入 - 它们来自字符集 Latin Extended-A 它们的hexa值不正确(0xBE,0x9A,0xE8,...)。预期值为0x013E,0x0161,0x010D,......
怎么可能这样呢?是否有可能或者我应该避免这些角色?
答案 0 :(得分:4)
GetPrivateProfileString
不进行任何字符转换。如果调用成功,它将准确地为您提供文件中的内容。
由于您希望拥有unicode字符,因此您的文件可能是UTF-8或UTF-16。如果您的文件是UTF-8,您应该能够使用GetPrivateProfileStringA
读取它,但它会为您提供一个char
数组,其中包含正确的UTF-8字符(即不是0x013E,因为0x013E不是UTF-8)。
如果您的文件是UTF-16,那么GetPrivateProfileStringW
应该可以工作,并在wchar_t
数组中提供UTF-16代码(0x013E,0x0161,0x010D,...)。
编辑:实际上您的文件是以Windows-1250编码的。这是单字节编码,因此GetPrivateProfileStringA
工作正常,如果您希望使用MultiByteToWideChar
并将1250作为代码页参数,则可以将其转换为UTF-16。