记录下 UTF6 GBK 转换函数

本文详细介绍了如何在GBK与UTF-8编码之间进行转换,包括使用MultiByteToWideChar和WideCharToMultiByte函数实现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;  
}  

 

转载于:https://www.cnblogs.com/itdef/p/3826999.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值