C++ 中文字符编码转换 GBK/UTF-8

copy from:

https://blog.csdn.net/fengyelengfeng/article/details/49361963

做了一下改动,直接传入和返回CString。

#include <iostream>  
#include <string>  
#include <fstream>  
#include <windows.h>   
  
using namespace std;  
  
void GBKToUTF8(CString &strAscii)
{  
    string s,s2;
    std::string strGBK;
    strGBK=strAscii.GetBuffer(0);
    string strOutUTF8 = "";  
    WCHAR * str1;  
    int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);  
    str1 = new WCHAR[n];  
    MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);  
    n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);  
    char * str2 = new char[n];  
    WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);  
    strOutUTF8 = str2;  
    delete[]str1;  
    str1 = NULL;  
    delete[]str2;  
    str2 = NULL; 
    strAscii=strOutUTF8.c_str();
    //return strOutUTF8;
}
  
void UTF8ToGBK(CString &cstrUTF8)  
{  
    string strUTF8;
    strUTF8 = cstrUTF8.GetBuffer(0);
    int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);  
    unsigned short * wszGBK = new unsigned short[len + 1];  
    memset(wszGBK, 0, len * 2 + 2);  
    MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUTF8.c_str(), -1, wszGBK, len);  
    
    len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);  
    char *szGBK = new char[len + 1];  
    memset(szGBK, 0, len + 1);  
    WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGBK, len, NULL, NULL);  
    //strUTF8 = szGBK;  
    std::string strTemp(szGBK);  
    delete[]szGBK;  
    delete[]wszGBK;  
    cstrUTF8 = strTemp.c_str();
    //return strTemp;  
}  

  
int _tmain(int argc, _TCHAR* argv[])  
{  
    //所有数据转码成UTF-8
    CString strCeramic = "测试用";
    GBKToUTF8(strCeramic);
}

猜你喜欢

转载自blog.csdn.net/qq_39459939/article/details/82661960
今日推荐