#include "stdafx.h"
#include <iostream>
#include <atlstr.h> // for CString
#include <windows.h>
#include <lm.h>
using namespace std;
char* CreateUTF8TextInitWithString(CString strValue)
{
char *buffer = NULL;
int length;
#ifdef _UNICODE
length = WideCharToMultiByte(CP_UTF8, 0, strValue, -1, NULL, 0, NULL, NULL);
#else
return NULL;
#endif
if (length <= 0)
{
return NULL;
}
buffer = new char[length];
if (buffer == NULL)
{
return NULL;
}
ZeroMemory(buffer, length);
#ifdef _UNICODE
WideCharToMultiByte(CP_UTF8, 0, strValue, -1, buffer, length, NULL, NULL);
#else
strcpy_s(buffer, length, strValue);
#endif
return buffer;
}
BOOL CreateString_InitWithUTF8Text(CString& str, char* pUTF8Text)
{
if (NULL == pUTF8Text)
{
return FALSE;
}
int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
0,
pUTF8Text,
-1,
NULL,
0 );
wchar_t* pUnicode = new wchar_t[unicodeLen+1];
if (NULL == pUnicode)
{
return FALSE;
}
MultiByteToWideChar( CP_UTF8, 0, pUTF8Text, -1, (LPWSTR)pUnicode, unicodeLen );
str = pUnicode;
delete []pUnicode;
return TRUE;
}
int _tmain()
{
// 转换 CString 到 utf-8编码
char* buff = CreateUTF8TextInitWithString(CString(TEXT("这都不是问题吧。")));
// 转换 utf-8 到 CString 编码
CString str;
if (CreateString_InitWithUTF8Text(str, buff))
{
cout << "successed... ";
}
delete []buff;
return 0;
}
UTF-8 和 CString 互相转换
最新推荐文章于 2024-04-10 10:29:51 发布