GBK转码成UTF-8及奇数个汉字解码得到乱码的问题(C++)

本文探讨了在C++中将GBK编码转换为UTF-8时遇到的两个问题:内存分配不足和奇数个汉字解码导致的乱码。提出了解决方案,即增加内存申请长度,并详细解释了问题原因。测试代码表明,该问题可能在与服务器交互时出现。
摘要由CSDN通过智能技术生成

首先转码方法网上很多,如下面:

__inline void Convert(const char* strIn, char* strOut, int sourceCodepage, int targetCodepage)
{
	int len=lstrlen(strIn);   
	int unicodeLen=MultiByteToWideChar(sourceCodepage,0,strIn,-1,NULL,0);   
	wchar_t* pUnicode;   
	pUnicode=new wchar_t[unicodeLen+1];   
	memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));   
	MultiByteToWideChar(sourceCodepage,0,strIn,-1,(LPWSTR)pUnicode,unicodeLen);   
	BYTE * pTargetData = NULL;   
	int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);   
	pTargetData=new BYTE[targetLen+1];   
	memset(pTargetData,0,targetLen+1);   
	WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);   
	lstrcpy(strOut,(char*)pTargetData);   
	delete pUnicode;
	pUnicode = NULL;
	delete pTargetData;
	pTargetData = NULL;
}


GBK转成UTF-8:</

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值