如何使用扩展字符集读取ini文件? (C++ 语言。)
How to use extended character set in reading ini file? (C++ lang.)
我遇到一个小问题。我来自在语言中使用扩展字符集的国家(特别是拉丁语 Extended-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。它们的六进制值是正确的(0xFD、0xE1、0xED,...)。
字符 ľ,š,č,ť,ž 读取不正确 - 它们来自字符集 Latin Extended-A 它们的十六进制值不正确(0xBE、0x9A、0xE8、 ...)。预期值为 0x013E、0x0161、0x010D、...
这是怎么做到的?是否有可能或者我应该完全避免使用这些字符?
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。
我遇到一个小问题。我来自在语言中使用扩展字符集的国家(特别是拉丁语 Extended-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。它们的六进制值是正确的(0xFD、0xE1、0xED,...)。
字符 ľ,š,č,ť,ž 读取不正确 - 它们来自字符集 Latin Extended-A 它们的十六进制值不正确(0xBE、0x9A、0xE8、 ...)。预期值为 0x013E、0x0161、0x010D、...
这是怎么做到的?是否有可能或者我应该完全避免使用这些字符?
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。