解决WideCharToMultiByte结尾乱码问题
2016-04-27 23:49
281 查看
1、乱码情况
CString strInput = L"学习1";
int len = WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength(),NULL,0,NULL,NULL);
char *p = new char[len + 1];
A:
WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength(),p,len,NULL,NULL);
p[len + 1] = '\0';
这种方式转换后的字符串末尾会乱码,就算末尾赋值为‘\0’依旧是乱码
2、修改方法
将上面标注的A行代码改为:
WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength() + 1,p,len + 1,NULL,NULL);
或者改为:
WideCharToMultiByte(CP_ACP,0,strInput,-1,p,len + 1,NULL,NULL);
//第4个参数为-1时,字符串strInput将被设定为以NULL为结束符的字符串,并且自动计算长度。
3、为什么要这样改?
WideCharToMultiByte(CP_ACP,0,strInput,strInput.GetLength(),p,len,NULL,NULL);
采用这种方式时,strInput结束符不会被转换到p中去,因为strInput.GetLength()不包括结束符
WideCharToMultiByte(CP_ACP,0,strInput,-1,p,len,NULL,NULL);
采用这种方式时,strInput结束符不会被转换到p中去,因为len长度不够放结束符
综上原因,把上面提到的2处参数改为“2、修改方法”里面的那样,就可以去掉末尾的乱码了
以上代码本人亲测
相关文章推荐
- AndroidStudio 删除依赖的 Android Library Module
- iOS学习笔记45-Swift(五)协议
- 个人工作总结06
- 个人工作总结07
- android_Widget桌面小组件_Clock
- 安装zookeeper遇到的问题以及解决方案
- 爬虫-python调用百度API/requests
- [置顶] Android开发之SDCardUtils工具类。java工具详细代码,附源代码。判断SD卡是否挂载等功能
- 杭电ACM---1003(水过)
- React 事件踩坑(一)
- IPerf——网络测试工具介绍与源码解析(5)
- 发布Android程序
- iOS学习笔记45-Swift(五)协议
- 是什么让javascript变得如此奇妙
- <脱机手写汉字识别若干关键技术研究>
- C语言源代码编译全过程
- <脱机手写汉字识别若干关键技术研究>
- APP上架流程(2016最新版)
- 学习js的点点滴滴记录
- cjson源码阅读有感