MultiByte转UTF8的函数,汉字全变为问号

dimply 2014-06-25 06:50:15
我写了一个MultiByte转UTF8的函数,之前用它一直没错,后来改成多线程之后,在非主线程里面就出错, WideCharToMultiByte( CP_UTF8, 0, &wcsText[ 0 ], -1, &strUtf8[ 0 ], iNumCharacter, NULL, NULL );
是从这一句执行后,原来字串里别的字符都对,但是汉字全变成了'?',并显示Invalid characters in string有没有人知道怎么回事哦

string CDllValidateDlg::MultiByteToUtf8( const char* pszMultiByte )  
{
string strUtf8;

if( NULL == pszMultiByte )
{
return strUtf8;
}

int iNumCharacter = 0;

//convert from MultiByte to WideChar
wstring wcsText;
iNumCharacter = MultiByteToWideChar( CP_ACP, 0, pszMultiByte, -1, NULL, 0 );
wcsText.resize( iNumCharacter + 1 );//addition 1 for '\0'

MultiByteToWideChar( CP_ACP, 0, pszMultiByte, -1, &wcsText[ 0 ], iNumCharacter );

//convert from WideChar to utf8
iNumCharacter = WideCharToMultiByte( CP_UTF8, 0, &wcsText[ 0 ], -1, NULL, 0, NULL, NULL );
strUtf8.resize( iNumCharacter + 1 );
WideCharToMultiByte( CP_UTF8, 0, &wcsText[ 0 ], -1, &strUtf8[ 0 ], iNumCharacter, NULL, NULL );
DWORD error = GetLastError();

return strUtf8;
}

MultiByte 转为 WideChar 是对的
WideChar 转为 MultiByte 汉字全部变成问号了

而且这个函数我之前一直在用,是刚刚修改程序增加了线程之后,在线程里出错的。
...全文
161 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
davidyu720 2014-06-25
  • 打赏
  • 举报
回复
WideChar 转为 MultiByte 汉字,GetLastError()是多少?

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧