在将UNICODE字符转换为UTF-8多字节字符时感到困惑

时间:2013-01-09 12:54:31

标签: unicode

我必须在我的应用程序中加载一个“dll”文件,该文件位于包含“UNICODE”字符的路径中。当我在wchar_t *中获取路径并将其传递给LoadLibrary()时,按预期工作。

但我是另一种方式 1.将宽字符数组转换为UTF-8多字节数组。 2.再次将UTF-8多字节数组转换为宽字符数组。 3.现在使用转换后的宽字符数组作为库的路径。 LoadLibrary()失败,GetLastError()给出216(找不到模块错误)。

我尝试了上面的步骤,认为输入第1步将输出第2步,但它不是......: - (

以下是我正在尝试做的代码详情......

wchar_t* path = L".\\..\\libs\\여성해방운동\\mylib.dll";

//STEP 1:
int creq = WideCharToMultiByte(CP_UTF8,0,path,-1,NULL,0,NULL,NULL);
char* cpath = (char*)malloc(sizeof(char)*creq);
memset(cpath,0,creq);
WideCharToMultiByte(CP_UTF8,0,path,-1,cpath,creq,NULL,NULL);

//STEP:2
int wreq = MultiByteToWideChar(CP_ACP,0,cpath,-1,NULL,0);
wchar_t* wpath = (wchar_t*)malloc(sizeof(wchar_t)*wreq);
memset(wpath,0,sizeof(wchar_t)*wreq);
MultiByteToWideChar(CP_ACP,0,cpath,-1,wpath,wreq);

//STEP:3
if( LoadLibrary(wpath) == NULL )
    printf("Loading failed %d \n",GetLastError());
else
    printf("Loading is success \n");

我尝试使用cpath(STEP 1的输出)使用“LoadLibraryA”API加载库,但它也失败了。

在我的应用程序中,我必须将宽字符数组转换为多字节数组,并在另一个API中将其反转。如果有人知道的话,请帮助我。

感谢。

1 个答案:

答案 0 :(得分:1)

在步骤1中,您使用CP_UTF8进行了转换。因此,在第2步中,您还需要使用CP_UTF8调用MultiByteToWideChar()

我希望LoadLibraryA(cpath, ...)失败,因为它假设cpath位于CP_ACP中 - 无论您的计算机恰好设置为哪个系统代码页。