您的位置:首页 > 其它

MFC中 GB2312、UTF-8、unicode 之间转换

2012-07-03 18:41 375 查看
//GB2312到UTF-8的转换

static int GB2312ToUtf8(const char* gb2312, char* utf8)

{

int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);

wchar_t* wstr = new wchar_t[len+1];

memset(wstr, 0, len+1);

MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);

len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);

WideCharToMultiByte(CP_UTF8, 0, wstr, -1, utf8, len, NULL, NULL);

if(wstr) delete[] wstr;

return len;

}

//UTF-8到GB2312的转换

static int Utf8ToGB2312(const char* utf8, char* gb2312)

{

int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);

wchar_t* wstr = new wchar_t[len+1];

memset(wstr, 0, len+1);

MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);

len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);

WideCharToMultiByte(CP_ACP, 0, wstr, -1, gb2312, len, NULL, NULL);

if(wstr) delete[] wstr;

return len;

}

//GB2312到Unicode的转换

static int GB2312ToUnicode(const char* gb2312, char* unicode)

{

UINT nCodePage = 936; //GB2312

int len = MultiByteToWideChar(nCodePage, 0, gb2312, -1, NULL, 0);

wchar_t* wstr = new wchar_t[len+1];

memset(wstr, 0, len+1);

MultiByteToWideChar(nCodePage, 0, gb2312, -1, wstr, len);

len = len*sizeof(wchar_t);

memcpy(unicode, wstr, len);

if(wstr) delete[] wstr;

return len;

}

//Unicode到GB2312的转换

static int UnicodeToGB2312(const char* unicode, int size, char*gb2312)

{

UINT nCodePage = 936; //GB2312

wchar_t* wstr = new wchar_t[size/2+1];

memcpy(wstr, unicode, size);

int len = WideCharToMultiByte(nCodePage, 0, wstr, -1, NULL, 0, NULL, NULL);

WideCharToMultiByte(nCodePage, 0, wstr, -1, gb2312, len, NULL, NULL);

if(wstr) delete[] wstr;

return len;

}

//UTF-8到Unicode的转换

static int Utf8ToUnicode(const char* utf8, char*unicode)

{

int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);

wchar_t* wstr = new wchar_t[len+1];

memset(wstr, 0, len+1);

MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);

memcpy(unicode, wstr, len);

if(wstr) delete[] wstr;

return len;

}

//Unicode到UTF-8的转换

static int UnicodeToUtf8(const char* unicode, int size, char* utf8)

{

wchar_t* wstr = new wchar_t[size/2+1];

memcpy(wstr, unicode, size);

int len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);

WideCharToMultiByte(CP_UTF8, 0, wstr, -1, utf8, len, NULL, NULL);

if(wstr) delete[] wstr;

return len;

}

参考:/article/8028194.html

http://topic.csdn.net/u/20080710/14/9cf9d46b-6b25-4d26-bc39-a749dc9823d2.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: