vs2013 c++ 编程CString字符串查找替换后变乱码的原因及解决方法
来源:互联网 发布:数据库实用教程 下载 编辑:程序博客网 时间:2024/05/16 06:24
对于大可以文本方式打开的文件,vs2013下用CString自身的查找替换函数不会出问题,但有些文件较特殊,比如vs工程的资源文件*.rc和resource.h,这些文件也可用记事本打开,但它们不是普通的文本文件,用CString查找时明明有相同字符串可它就是找不到,或者碰巧找到了替换后变成乱码.
问题产生的原因是CString的替换操作破坏了原文件的二进制编码,这是因为VS用unicode编码,无论中英文字符串,每个中文字\英文字符都占两个字节,对于英文字符,有效编码在低字节位,高字节位为'\0'. 中文字时两个字节都有效,CString的getlength计算的字符串长度不对,导致替换不完整及二进制编码错位.编码错位后高低字节位颠倒,所以显示乱码.
解决的办法是:
1. 采用二进制方式打开文件,将文件的全部内容读入到char*缓冲区.
2.不要将缓冲区内容付给CString进行查找操作, 而是正好相反,需要把要替换的字符串转为char*到缓冲区查找.
3. 如果要替换的字符串本身就保存在char*或char[]数组中无需任何额外操作,但当替换字符串是保存在CString中时要进行类型转换:
char *p = (LPSTR)(LPCTSTR)a_CString;
4.最关键的一步,计算替换字符串的长度。
int GetCStringLength(CString str)
{
int len, i;
char *p = (LPSTR)(LPCTSTR)str;
i = 0;
while (p[i] != '\0')
{
++i;
i++;
}
return i;
}
5, 在缓冲区查按计算的长度找与*p相同的字符串(可以是中英文混合)就可以了,至于怎么保存可自己规划。
- vs2013 c++ 编程CString字符串查找替换后变乱码的原因及解决方法
- CSTring字符串的查找
- java中文乱码的原因及解决方法
- ID3DXFont显示乱码的原因及解决方法
- 中文乱码的原因及解决方法
- DVD刻录速度突然变慢的原因及解决方法
- 文件上传文件名乱码的解决方法及形成乱码原因
- eclipse中文变乱码原因及解决办法
- [编程题]查找替换字符串
- 字符串 的查找 替换
- Windows变慢原因分析及解决方法
- Windows 变慢原因分析及解决方法
- Windows变慢原因分析及解决方法
- Windows变慢原因分析及解决方法
- C语言字符串查找替换
- C#HttpClient或使用CookieContainer模拟登陆后HttpRequest不发送cookie的解决方法及原因
- php 开发wap乱码可能的原因及解决方法
- MySQL+PHP产生乱码的原因及解决方法
- uva 131 有超能力的纸牌玩家
- 在PHP中应用AJAX技术检测用户名是否重复
- android camera HAL v3.0详细介绍(二)
- android获得控件在屏幕中的绝对坐标 getLocationInWindow 和 getLocationOnScreen
- mysql编码问题
- vs2013 c++ 编程CString字符串查找替换后变乱码的原因及解决方法
- Android动画不改变可见属性
- HTML页面-------3秒之后自动跳转的3种常用的实现方式
- C语言 字符串常用函数(计算长度,拷贝,拼接,比较)
- Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)
- 黑马程序员-Java中只读类String和StringBuffer、StringBuilder类)
- android MotionEvent中getX()和getRawX()的区别
- 回调
- android camera HAL v3.0详细介绍(一)