2010-11-24 56 views
2

我有一个用Windows-1251编码编写的dll-project,我需要用UTF-16编码我的dll输出。我用下面的函数来执行转换:Win1251-> UTF16转换

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.我很抱歉语法错误。

回答

10

setlocale是一个CRT功能。显然,Windows API不关心通过它设置的内容。

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

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