处理字符串中的6字节乱码汉字 C3 XX C2 XX C2 XX
来源:互联网 发布:linux 定时任务报错 编辑:程序博客网 时间:2024/06/03 08:15
开发邮件或其他APP时,会发现有的UTF8汉字(3字节)被组合添加了3个字节(C3 C2 C2),在OC代码中需要去除。
//处理字符串中的6字节乱码汉字 C3 XX C2 XX C2 XXvoid resolveHZcode(char *orgstr, char *newstr){ int j=0; int needDeal = 0; //0, 0x40, 0xff int nearestC3 = 0; //为了确保处理C2时是紧接着C3后面的汉字,而非其他C2编码字符(如C2 A0代表无中断空格,不应转换) //注意,有时候一些繁体汉字造成乱码问题,可能出现C3 XX C2 XX C2 XX C2 XX,因此本项目暂时仅考虑最多8字节的情况 for (int i=0;i<strlen(orgstr);i++) { unsigned char c = (unsigned char)orgstr[i]; if(needDeal == 0x40) // C3后面的字节,添加0x40 { newstr[j] = c + 0x40; j++; needDeal = 0; continue; } if(needDeal == 0xff) // C2后面的字节,直接接续 { newstr[j] = c; j++; needDeal = 0; continue; } if(c == 0xc3) { needDeal = 0x40; nearestC3 = i+1; //+1是为了防止字符串第一个字节就是C3造成误判 continue; } if(c == 0xc2) { if((nearestC3-1 + 2 == i) || (nearestC3-1 + 4 == i) || (nearestC3-1 + 6 == i)) //为了确保处理C2时是紧接着C3后面的汉字. { needDeal = 0xff; continue; } } if(nearestC3 > 0) { if(nearestC3-1 + 2 == i) //如果C3 XX 后面没有跟C2,说明汉字不完整,删除先前的1字节内容 { j--; } if(nearestC3-1 + 4 == i) //如果C3 XX C2 XX 后面没有跟C2,说明汉字不完整,删除先前2字节内容 { j -= 2; } } nearestC3 = 0; newstr[j] = c; j++; } newstr[j] = 0;}
0 0
- 处理字符串中的6字节乱码汉字 C3 XX C2 XX C2 XX
- XX
- xx
- xx
- xx
- XX
- xx
- xx
- xx
- XX
- xx
- xx
- xx
- xx
- xx
- xx
- xx
- XX
- ionic入门教程第二十课-在微信中使用ionic的解决方案(开源框架)
- websphere 发布配置
- MySql-InnoDB存储引擎的锁和事务
- mysql 查询锁表和解锁
- NSIS创建快捷方式增加起始位置的解决教程
- 处理字符串中的6字节乱码汉字 C3 XX C2 XX C2 XX
- 手机开发过程中一些有用的命令
- 表单文件上传下载ajax方式返回值
- Android——操作摄像头、图片合成
- 配置Tomcat使用https协议
- String-->char[],char[]-->String转换
- Mybatis参数传递
- 如何在onCreate里面绘制View宽高
- 看阿里记录片--造梦者有感