我必须将VB6应用程序的字符串输出的编码转换为特定的编码。
问题是,我不知道字符串的编码,因为:
根据VB6文档,在访问某些API函数时,使用Windows的默认代码页将内部Unicode字符串转换为ANSI字符串。
因此,字符串输出的编码在不同的系统上可能会有所不同,但我必须知道它才能执行转换。
如何使用Win32 API读取默认代码页,或者 - 如果没有其他办法 - 通过阅读注册表来阅读?
答案 0 :(得分:14)
使用GetACP - Win32 API调用返回默认代码页可能更简洁! (默认代码页通常称为“ANSI”)
int nCodePage = GetACP();
许多API调用(例如MultiByteToWideChar
)也会接受始终为means "use the system code page"的常量值CP_ACP
(零)。因此,您可能实际上不需要知道当前的代码页,具体取决于您要对其执行的操作。
答案 1 :(得分:1)
GetSystemDefaultLCID()为您提供系统区域设置。
如果LCID不够并且您确实需要代码页,请使用以下代码:
TCHAR szCodePage[10];
int cch= GetLocaleInfo(
GetSystemDefaultLCID(), // or any LCID you may be interested in
LOCALE_IDEFAULTANSICODEPAGE,
szCodePage,
countof(szCodePage));
nCodePage= cch>0 ? _ttoi(szCodePage) : 0;
答案 2 :(得分:0)
这对我有用,谢谢,但可以更简洁地写成:
UINT nCodePage = CP_ACP;
const int cch = ::GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,
LOCALE_RETURN_NUMBER|LOCALE_IDEFAULTANSICODEPAGE,
(LPTSTR)&nCodePage, sizeof(nCodePage) / sizeof(_TCHAR) );