我该如何修复此代码?

时间:2012-08-18 08:35:45

标签: 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));
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;    
} 

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

1 个答案:

答案 0 :(得分:0)

嗯,没有szTeam 更改。变成无法辨认的东西,莫吉巴克。你从“罗切达尔流浪”开始,将其从utf-16编码转换为utf-8。这很好。调试器不会显示任何可识别的内容,因为它既不知道也不关心szMsg是用utf-8编码的。

然后你出错了,你正在用CP_ACP转换那个utf-8字符串。这表示字符串是在默认系统代码页中编码的。它不是,它是用utf-8编码的。

解决您的问题:

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

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