C++ 如何修复此代码?
这段代码没有按预期工作,我不知道出了什么问题 szTeam应该改变,但不会 有人能解释一下吗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))
-----------------------------------------------------
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表示法?您不必转换它,编译器会为您进行转换,生成正确的字符串。