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

在将UNICODE字符转换为UTF-8多字节字符时感到困惑,unicode,Unicode,我必须在我的应用程序中加载一个“dll”文件,该文件位于包含“UNICODE”字符的路径中。当我在wchar_t*中获得路径并将其传递给LoadLibrary()时,它会按预期工作 但我在另一方面 1.将宽字符数组转换为UTF-8多字节数组。 2.再次将UTF-8多字节数组转换为宽字符数组。 3.现在使用转换后的宽字符数组作为库的路径。LoadLibrary()失败,GetLastError()给出216(找不到模块错误) 我尝试了上述步骤,认为第一步的输入将是第二步的输出,但不是…:-( 下面

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

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

我尝试了上述步骤,认为第一步的输入将是第二步的输出,但不是…:-(

下面是关于我正在尝试做什么的代码详细信息

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(步骤1的输出)来使用“LoadLibraryA”API加载库,但也失败了

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


谢谢。

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


我预计加载库A(cpath,…)会失败,因为它假设cpath在CP\u ACP中-无论计算机设置到哪个系统代码页。

在步骤1中,您使用CP\u UTF8进行转换。因此在步骤2中,您还需要使用CP\u UTF8调用
MultiByteToWideChar()


我希望加载库A(cpath,…)会失败,因为它假设cpath在CP_ACP中-无论您的计算机恰好设置到哪个系统代码页。

请参阅utf8everywhere.org,还有boost::nowide这是最简单的编写方法。请参阅utf8everywhere.org,还有boost::nowide这是最简单的编写方法。