头文件引用:#include <string>
void CGetpostDlg::UTF8toANSI(CString &strUTF8)
{
USES_CONVERSION;
char * strutf8 = W2A(strUTF8);
//获取转换为多字节后需要的缓冲区大小,创建多字节缓冲区
UINT nLen = MultiByteToWideChar(CP_UTF8, NULL, strutf8, -1, NULL, NULL);
WCHAR *wszBuffer = new WCHAR[nLen + 1];
nLen = MultiByteToWideChar(CP_UTF8, NULL, strutf8, -1, wszBuffer, nLen);
wszBuffer[nLen] = 0;
nLen = WideCharToMultiByte(936, NULL, wszBuffer, -1, NULL, NULL, NULL, NULL);
CHAR *szBuffer = new CHAR[nLen + 1];
nLen = WideCharToMultiByte(936, NULL, wszBuffer, -1, szBuffer, nLen, NULL, NULL);
szBuffer[nLen] = 0;
string szbuffer = szBuffer;
strUTF8 = szbuffer.c_str();
//清理内存
delete[]szBuffer;
delete[]wszBuffer;
}
void CGetpostDlg::ANSItoUTF8(CString &strAnsi)
{
USES_CONVERSION;
char * stransi = W2A(strAnsi);
//获取转换为宽字节后需要的缓冲区大小,创建宽字节缓冲区,936为简体中文GB2312代码页
UINT nLen = MultiByteToWideChar(936, NULL, stransi, -1, NULL, NULL);
WCHAR *wszBuffer = new WCHAR[nLen + 1];
nLen = MultiByteToWideChar(936, NULL, stransi, -1, wszBuffer, nLen);
wszBuffer[nLen] = 0;
//获取转为UTF8多字节后需要的缓冲区大小,创建多字节缓冲区
nLen = WideCharToMultiByte(CP_UTF8, NULL, wszBuffer, -1, NULL, NULL, NULL, NULL);
CHAR *szBuffer = new CHAR[nLen + 1];
nLen = WideCharToMultiByte(CP_UTF8, NULL, wszBuffer, -1, szBuffer, nLen, NULL, NULL);
szBuffer[nLen] = 0;
string szbuffer = szBuffer;
strAnsi = szbuffer.c_str();
//内存清理
delete[]wszBuffer;
delete[]szBuffer;
}