如何以编程方式确定Windows的当前默认代码页?

Dan*_*ski 7 winapi character-encoding

我必须将VB6应用程序的字符串输出的编码转换为特定的编码.

问题是,我不知道字符串的编码,因为:

根据VB6文档访问某些API函数时,使用Windows 的默认代码页将内部Unicode字符串转换为ANSI字符串.

因此,字符串输出的编码在不同系统上可能不同,但我必须知道它才能执行转换.

如何使用Win32 API读取默认代码页,或者 - 如果没有其他方法 - 通过阅读注册表?

Mar*_*rkJ 16

使用GetACP可以更简洁- Win32 API调用返回默认代码页!(默认代码页通常称为"ANSI")

int nCodePage = GetACP(); 
Run Code Online (Sandbox Code Playgroud)

此外,许多API调用(例如MultiByteToWideChar)接受常量值CP_ACP(零),这总是意味着"使用系统代码页".因此,您可能实际上不需要知道当前的代码页,具体取决于您要对其执行的操作.