C++ 如何修复此代码?

C++ 如何修复此代码?,c++,visual-studio-2010,mfc,dialog,web,C++,Visual Studio 2010,Mfc,Dialog,Web,这段代码没有按预期工作,我不知道出了什么问题 szTeam应该改变,但不会 有人能解释一下吗 ----------------------------------------------------- WCHAR szTeam[MAX_PATH] = L"\u7F57\u5207\u8FBE\u5C14\u6D41\u6D6A"; char szMsg[MAX_PATH]; sprintf(szMsg , "%s" , WideStringToMultiByte(szTeam))

这段代码没有按预期工作,我不知道出了什么问题

szTeam应该改变,但不会

有人能解释一下吗

-----------------------------------------------------

WCHAR   szTeam[MAX_PATH] = L"\u7F57\u5207\u8FBE\u5C14\u6D41\u6D6A";
char    szMsg[MAX_PATH];

sprintf(szMsg , "%s"  , WideStringToMultiByte(szTeam));
swprintf( szTeam , L"%s" , MultiByteToWideString(szMsg));

......

WCHAR* MultiByteToWideString(const char* szSrc)
{
    int iSizeOfStr = MultiByteToWideChar(CP_ACP, 0, szSrc, -1, NULL, 0);  
    wchar_t* wszTgt = new wchar_t[iSizeOfStr];  
    if(!wszTgt)
        return (NULL);  
    MultiByteToWideChar(CP_ACP, 0, szSrc, -1, wszTgt, iSizeOfStr);
    return(wszTgt);
}

char* WideStringToMultiByte(const wchar_t* wszSrc)  
{  
    int iSizeOfStr = WideCharToMultiByte(CP_UTF8, 0, wszSrc, -1, NULL, 0, NULL, NULL);  
    char* szTgt = new char[iSizeOfStr];  
    if(!szTgt)
        return(NULL);  
    WideCharToMultiByte(CP_UTF8, 0, wszSrc, -1, szTgt, iSizeOfStr, NULL, NULL);  
    return szTgt;    
} 

-----------------------------------------------------
呃,没有一支球队会改变。变成了一种无法辨认的东西,莫吉贝克。你从罗切达尔流浪 并将其从utf-16编码转换为utf-8。那很好。调试器不会向您显示任何可识别的内容,因为它既不知道也不关心szMsg是否以utf-8编码

然后出错了,您正在使用CP\u ACP转换utf-8字符串。这表示字符串在默认系统代码页中编码。不是,它是用utf-8编码的

用以下方法解决您的问题:

WCHAR* MultiByteToWideString(const char* szSrc)
{
    int iSizeOfStr = MultiByteToWideChar(CP_UTF8, 0, szSrc, -1, NULL, 0);  
    // etc..
}

现在szTeam不会更改,因为字符串已正确转换回。

您能解释一下这个问题吗?我看到了一些问题,你需要一个宽字符串,将其转换为多字节字符串,然后将其转换回来。你说之后的结果和你开始时的结果一样?输入输出,你希望得到什么..我想把Unicode十六进制转换成字符串。@bTagTiger“Unicode十六进制”是什么意思\字符串文字中的uxxx表示法?您不必转换它,编译器会为您进行转换,生成正确的字符串。