解决WideCharToMultiByte结尾乱码问题
来源:互联网 发布:f117和f22 知乎 编辑:程序博客网 时间:2024/06/05 04:23
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、修改方法”里面的那样,就可以去掉末尾的乱码了
以上代码本人亲测
- 解决WideCharToMultiByte结尾乱码问题
- CString与char[] 的相互转换方法以及结尾乱码问题的分析解决
- CString与char[] 的相互转换方法以及结尾乱码问题的分析解决
- CString 进行Format 转换结尾乱码问题
- 解决读文档结尾字符输出两次的问题
- 解决unix与windows文本结尾不匹配的问题
- 解决了乱码问题
- 解决中文乱码问题
- 解决vim乱码问题
- 解决中文乱码问题
- 解决中文乱码问题
- 解决中文乱码问题
- 解决RichViewEdit乱码问题
- 解决jsp乱码问题
- 解决Ajax乱码问题
- 解决Rhythmbox乱码问题
- 解决HttpUrlConnection乱码问题
- 解决中文乱码问题
- 常用的adb指令
- Android混淆APK直接copy使用
- 杭电ACM---1002(大数)
- 平衡二叉树-Java
- AndroidStudio 删除依赖的 Android Library Module
- 解决WideCharToMultiByte结尾乱码问题
- iOS- UI控件常见属性总结
- 算法是内功,别冷落算法!(转)
- android studio常用快捷键
- JAVA String StringBuffer StringBuilder
- sed行处理详解(交换行,合并行,删除行等)
- 为什么要进行URL编码
- 凌宇的项目之旅
- 4.理解系统调用的工作机制