Rom*_*kii 3 c++ unicode winapi locale
我有一个用Windows-1251编码编写的dll项目,我需要用UTF-16编码的dll输出.我使用以下函数进行转换:
ptr = MultiByteToWideChar(CP_ACP, 0, str, -1, wbuff.getBuffer(), len);
Run Code Online (Sandbox Code Playgroud)
不幸的是,MultiByteToWideChar使用系统区域设置作为源编码.因此,例如,如果我的Windows语言环境是英语(美国),它会根据需要转换Win1252-> UTF8,而不是Win1251-> UTF8.
我尝试手动设置区域设置,但以下代码也不起作用:
enc = setlocale(CL_ALL, "rus_rus.1251");
//this returns Windows-1251 encoding
ptr = MultiByteToWideChar(CP_ACP, 0, str, -1, wbuff.getBuffer(), len);
Run Code Online (Sandbox Code Playgroud)
据我所知,MultiByteToWideChar总是使用系统区域设置,忽略我的setlocale调用.
还有其他方法可以进行此类转换吗?或者我可能只是不理解这些区域设置?谢谢.
PS我很抱歉语法错误.
val*_*ldo 11
setlocale
是一个CRT功能.显然,Windows API并不关心通过它设置什么.
你应该设置的,而不是(在你的案件1251)所需要的代码页CP_ACP
(这意味着系统默认).
res = MultiByteToWideChar(1251, 0, str, -1, wbuff.getBuffer(), len);
Run Code Online (Sandbox Code Playgroud)