JAVA使用UTF-8格式字符串,JAVA与C++通信时将UTF-8串转为UNICODE串,如“ABCDabcd中国人民下沙123.杭州”转为UNICODE后外观如下:
\u41\u42\u43\u44\u61\u62\u63\u64\u4e2d\u56fd\u4eba\u6c11\u4e0b\u6c99\u31\u32\u33\u2e\u676d\u5dde
VC中如下处理即可转回来
CString CXXClass::UnicodeToString()
{
CString strUnicode = _T("\\u41\\u42\\u43\\u44\\u61\\u62\\u63\\u64\\u4e2d\\u56fd\\u4eba\\u6c11\\u4e0b\\u6c99\\u31\\u32\\u33\\u2e\\u676d\\u5dde");
INT iStart = 0, iEnd = 0;
CString strTmp, strOut;
TCHAR c;
BOOL bEnd = FALSE;
for (INT i = 0; i < strUnicode.GetLength(); ++i)
{
iEnd = strUnicode.Find(_T('\\u'), iStart);
if (iEnd < 0)
{
iEnd = strUnicode.GetLength();
bEnd = TRUE;
}
strTmp = strUnicode.Mid(iStart + 1, iEnd - iStart - 1);
if (!strTmp.IsEmpty())
{
//swscanf_s(strTmp.GetBuffer(), _T("%x"), &c);
//strTmp.ReleaseBuffer();
_stscanf_s(strTmp, _T("%x"), &c, 2);
strOut += c;
}
iStart = iEnd + 1;
if (bEnd)
{
break;
}
}
return strOut;
}
应该还有更好的方法,欢迎交流。