#include <Windows.h>
// 注釋:多位元組包括GBK和UTF-8
int GBK2UTF8(char *szGbk,char *szUtf8,int Len)
{
// 先将多位元組GBK(CP_ACP或ANSI)轉換成寬字元UTF-16
// 得到轉換後,所需要的記憶體字元數
int n = MultiByteToWideChar(CP_ACP,0,szGbk,-1,NULL,0);
// 字元數乘以 sizeof(WCHAR) 得到位元組數
WCHAR *str1 = new WCHAR[sizeof(WCHAR) * n];
// 轉換
MultiByteToWideChar(CP_ACP, // MultiByte的代碼頁Code Page
0, //附加标志,與音标有關
szGbk, // 輸入的GBK字元串
-1, // 輸入字元串長度,-1表示由函數内部計算
str1, // 輸出
n // 輸出所需配置設定的記憶體
);
// 再将寬字元(UTF-16)轉換多位元組(UTF-8)
n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
if (n > Len)
{
delete[]str1;
return -1;
}
WideCharToMultiByte(CP_UTF8, 0, str1, -1, szUtf8, n, NULL, NULL);
delete[]str1;
str1 = NULL;
return 0;
}
//UTF-8 GBK
int UTF82GBK(char *szUtf8,char *szGbk,int Len)
int n = MultiByteToWideChar(CP_UTF8, 0, szUtf8, -1, NULL, 0);
WCHAR * wszGBK = new WCHAR[sizeof(WCHAR) * n];
memset(wszGBK, 0, sizeof(WCHAR) * n);
MultiByteToWideChar(CP_UTF8, 0,szUtf8,-1, wszGBK, n);
n = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
delete[]wszGBK;
WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGbk, n, NULL, NULL);
delete[]wszGBK;
wszGBK = NULL;
本文轉自fengyuzaitu 51CTO部落格,原文連結:http://blog.51cto.com/fengyuzaitu/1880698,如需轉載請自行聯系原作者