MFC程序宽字节和UTF互转

1、Unicode、多字节、宽字节

一般MFC程序默认是unicode字符集的,字母和汉字都占两个字节。
而多字节字符集下,字母一个字节,汉字两个字节。

2、http请求中的乱码问题

一般服务端采用UTF-8编码,这种情况下如果本地用unicode字符集,会造成两边数据不匹配,发送到服务端的数据无法解析,服务端返回的数据也不能直接使用。

即使本地采用多字节字符集,也无法在http请求中发送中文(测试了英文可以)。
所以就需要手动处理数据, 发送到服务端前先从unicode转化为UTF-8,服务端返回的数据先从UTF-8转为unicode再显示在界面上

3、代码实现 MultiByteToWideChar和WideCharToMultiByte

unicode转utf-8

			DWORD  num = WideCharToMultiByte(CP_UTF8, 0, strPostData, -1, NULL, 0, NULL, NULL);//計算這個UNICODE实际由几个UTF-8字組成
			cword = (char*)calloc(num, sizeof(char));   //申请空间
			if (cword == NULL)                          //是否申请
			{
				free(cword);
			}
			memset(cword, 0, num*sizeof(char));     //初始化
			WideCharToMultiByte(CP_UTF8, 0, strPostData, -1, cword, num, NULL, NULL);
			printf("content长度为%d\n", strlen(cword));

utf-8转unicode

                /*utf8转unicode*/
		int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, strRawResponse.c_str(), -1, NULL, 0);
		WCHAR *pUnicode = new WCHAR[unicodeLen + 1];
		memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
		MultiByteToWideChar(CP_UTF8, 0, strRawResponse.c_str(), -1, pUnicode, unicodeLen);
		strResponse = pUnicode;//最终响应结果
		//TRACE(strResponse + L"");
		delete[]pUnicode;
		pUnicode = NULL;






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值