Win1251-> UTF16转换

时间:2010-11-24 12:26:54

标签: c++ winapi unicode locale

我有一个用Windows-1251编码编写的dll项目,我需要用UTF-16编码的dll输出。我使用以下函数进行转换:

ptr = MultiByteToWideChar(CP_ACP, 0, str, -1, wbuff.getBuffer(), len);

不幸的是,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);

据我所知,MultiByteToWideChar总是使用系统区域设置,忽略我的setlocale调用。

还有其他方法可以进行此类转换吗?或者我可能只是不理解这些区域设置?感谢。

P.S。对于语法错误,我很抱歉。

2 个答案:

答案 0 :(得分:11)

setlocale是CRT功能。显然,Windows API并不关心通过它设置什么。

您应该设置所需的代码页(在您的情况下为1251)而不是CP_ACP(这意味着系统默认)。

res = MultiByteToWideChar(1251, 0, str, -1, wbuff.getBuffer(), len);

答案 1 :(得分:0)

如果您不被迫使用WinAPI,则可能需要使用ICU's character converter