MFC UTF-8与Unicode编码转换

版权声明:原创博文,转载请注明出处! 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);

猜你喜欢

转载自blog.csdn.net/sunriver2000/article/details/84672282