此代码无法按预期工作,我不知道出了什么问题。
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;
}
-----------------------------------------------------
答案 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 不会更改,因为字符串已正确转换回来。