版权声明:原创博文,转载请注明出处! https://blog.csdn.net/sunriver2000/article/details/84672282
环境
适用范围:MFC。
字符集:多字节字符集。
声明
CString UTF8AndUnicode_Convert(CString &strSource, UINT nSourceCodePage, UINT nTargetCodePage);
定义
CString UTF8AndUnicode_Convert(CString &strSource, UINT nSourceCodePage, UINT nTargetCodePage)
{
CString strTarget;
wchar_t *pWideBuf;
int nWideBufLen;
char *pMultiBuf;
int nMiltiBufLen;
int nSourceLen;
nSourceLen = strSource.GetLength();
nWideBufLen = MultiByteToWideChar(nSourceCodePage, 0, strSource, -1, NULL, 0);
pWideBuf = new wchar_t[nWideBufLen+1];
memset(pWideBuf, 0, (nWideBufLen + 1) * sizeof(wchar_t));
MultiByteToWideChar(nSourceCodePage, 0, strSource, -1, (LPWSTR)pWideBuf, nWideBufLen);
pMultiBuf = NULL;
nMiltiBufLen = WideCharToMultiByte(nTargetCodePage, 0, (LPWSTR)pWideBuf, -1, (char *)pMultiBuf, 0, NULL, NULL);
pMultiBuf = new char[nMiltiBufLen+1];
memset(pMultiBuf, 0, nMiltiBufLen + 1);
WideCharToMultiByte(nTargetCodePage, 0, (LPWSTR)pWideBuf, -1, (char *)pMultiBuf, nMiltiBufLen, NULL, NULL);
strTarget.Format(_T("%s"), pMultiBuf);
delete pWideBuf;
delete pMultiBuf;
return strTarget;
}
调用方法
UTF-8转Unicode
m_strUnicode = UTF8AndUnicode_Convert(m_strUTF8, CP_UTF8, CP_ACP);
Unicode转UTF-8
m_strUTF8 = UTF8AndUnicode_Convert(m_strUnicode, CP_ACP, CP_UTF8);