MFC中,使用Edit控件显示中文遇到乱码。自己写了两个函数进行转化
1 // CString转换成string 2 string CDictDlg::CString2string(CString &str) 3 { 4 char *pCh = new char[MY_EDIT_TEXT_LENG]; 5 // W(2B) -> A(B) 6 WideCharToMultiByte(CP_ACP, 0, str.GetBuffer(), -1, pCh, str.GetLength() * 2, NULL, NULL); 7 pCh[str.GetLength() * 2] = 0; 8 string sRet(pCh); 9 delete pCh; 10 11 return sRet; 12 } 13 14 // string转换成wchar_t *类型 15 wchar_t *CDictDlg::string2pwc(string &str) 16 { 17 wchar_t *pwRet = new wchar_t[MY_EDIT_CONTRL_LENG]; 18 const char *pcCh(str.c_str()); 19 int cchWineChar = MultiByteToWideChar(CP_ACP, 0, pcCh, -1, pwRet, 0); 20 MultiByteToWideChar(CP_ACP, 0, pcCh, -1, pwRet, cchWineChar); 21 22 return pwRet; 23 }
参考MSDN
int WideCharToMultiByte(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCWSTR lpWideCharStr,
__in int cchWideChar,
__out_opt LPSTR lpMultiByteStr,
__in int cbMultiByte,
__in_opt LPCSTR lpDefaultChar,
__out_opt LPBOOL lpUsedDefaultChar
);
int MultiByteToWideChar(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCSTR lpMultiByteStr,
__in int cbMultiByte,
__out_opt LPWSTR lpWideCharStr,
__in int cchWideChar
);