您好,登錄后才能下訂單哦!
#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);
if (n > Len)
{
delete[]wszGBK;
return -1;
}
WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGbk, n, NULL, NULL);
delete[]wszGBK;
wszGBK = NULL;
return 0;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。