此贴值得一看

wenbo228228 2014-11-01 05:13:44

如图,我在响应保存时,向1.txt中写入数据,这里有一个问题,CString构造的时候强制指定了多字符字符集,但是实际上得到的却是宽字符字符集,这是为什么呢?CString这么做有何用意?

再看这里,大家注意CString保存的内容确实显示出来了,但是每两个字母之间有一个空格,且汉字乱码,求解释啊!!!!
...全文
178 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲月_奇缘 2014-11-04
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
TCHAR ch =_T( 't');
CString str(_T("http:\\sunxin.org再加点汉字"));
这个应该可以,可以试一下
lis2012 2014-11-04
  • 打赏
  • 举报
回复
怎么写入的再按照这个顺序反序列化出来,不然的话使用cfile进行读写操作
lis2012 2014-11-03
  • 打赏
  • 举报
回复
你的使用序列化操作(涉及到流的二进制写入),而不是单纯的文本写入
谁学逆向工程 2014-11-03
  • 打赏
  • 举报
回复
输入你的字符串以前还要输入两个字符,但是忘了编码是多少了
wenbo228228 2014-11-03
  • 打赏
  • 举报
回复
引用 13 楼 lis2012 的回复:
你的使用序列化操作(涉及到流的二进制写入),而不是单纯的文本写入
具体怎么操作?
赵4老师 2014-11-03
  • 打赏
  • 举报
回复
TCHAR ch =_T( 't');
CString str(_T("http:\\sunxin.org再加点汉字"));
wenbo228228 2014-11-02
  • 打赏
  • 举报
回复
引用 10 楼 u014137530 的回复:
[quote=引用 8 楼 wenbo228228 的回复:]
int a = 3;
		float f = 3.14f;
		char ch = 't';
		CStringA str("http:\\sunxin.org再加点汉字");
		str;
		ar <<a<<f<<ch<<str;
这样写入的话就一切正常了,这是因为CSrringA以多字符集写入内存数据,很明显记事本也是以多字符集打开文件的,但是之前以 宽字符集写入的时候,每两个字母之间有一个空格,且汉字乱码,仍然不能得到解释。主要是空格是怎么来的?汉字在这两种字符集中编码一样,为什么偏偏之前出现乱码?
VS2013编程,我想问一个简单的问题(MFC):我从文本文件(编码方式为UNICODE)里面读出第一行数据(存入CString str1,例如这一行数据是“123456”),然后和我从一个编辑框输入的咦串数据(CString str2),怎么比较str1和str2是否相等,只比较是否相同。我试过很多方法,都提示不相等,也许是我语句写的不正确,请各位大神帮忙解答 [/quote] 以前我也遇到过,想直接str1==str2,str1,str2都是CString类型,虽然孙鑫的教程里面可以,但是我这么做就是不行,不知道是不是CString被改过了
mypem 2014-11-02
  • 打赏
  • 举报
回复
引用 8 楼 wenbo228228 的回复:
int a = 3;
		float f = 3.14f;
		char ch = 't';
		CStringA str("http:\\sunxin.org再加点汉字");
		str;
		ar <<a<<f<<ch<<str;
这样写入的话就一切正常了,这是因为CSrringA以多字符集写入内存数据,很明显记事本也是以多字符集打开文件的,但是之前以 宽字符集写入的时候,每两个字母之间有一个空格,且汉字乱码,仍然不能得到解释。主要是空格是怎么来的?汉字在这两种字符集中编码一样,为什么偏偏之前出现乱码?
VS2013编程,我想问一个简单的问题(MFC):我从文本文件(编码方式为UNICODE)里面读出第一行数据(存入CString str1,例如这一行数据是“123456”),然后和我从一个编辑框输入的咦串数据(CString str2),怎么比较str1和str2是否相等,只比较是否相同。我试过很多方法,都提示不相等,也许是我语句写的不正确,请各位大神帮忙解答
dvlinker 2014-11-02
  • 打赏
  • 举报
回复
工程设置了Unicode编码,CString存放的就是宽字节,构造时传入的是窄字节,CSTring会自动转换成宽字节,可以调试进入CSTring的构造中看看
wenbo228228 2014-11-01
  • 打赏
  • 举报
回复
int a = 3;
		float f = 3.14f;
		char ch = 't';
		CStringA str("http:\\sunxin.org再加点汉字");
		str;
		ar <<a<<f<<ch<<str;
这样写入的话就一切正常了,这是因为CSrringA以多字符集写入内存数据,很明显记事本也是以多字符集打开文件的,但是之前以 宽字符集写入的时候,每两个字母之间有一个空格,且汉字乱码,仍然不能得到解释。主要是空格是怎么来的?汉字在这两种字符集中编码一样,为什么偏偏之前出现乱码?
wenbo228228 2014-11-01
  • 打赏
  • 举报
回复
哪位哥们能回答第二幅图片对应的问题?
wenbo228228 2014-11-01
  • 打赏
  • 举报
回复
引用 5 楼 zhangjie9u 的回复:
我来回答: 1、你工程指定的是UNICODE,那么CString就是UNICODE的,你工程指定的是MBCS,则CString就是MBCS的; 2、CStringA表示MBCS的,与工程设置无关,CStringW表示UNICODE的,与工程设置无关;
说得好
zhangjie9u 2014-11-01
  • 打赏
  • 举报
回复
我来回答: 1、你工程指定的是UNICODE,那么CString就是UNICODE的,你工程指定的是MBCS,则CString就是MBCS的; 2、CStringA表示MBCS的,与工程设置无关,CStringW表示UNICODE的,与工程设置无关;
wenbo228228 2014-11-01
  • 打赏
  • 举报
回复
第二个问题没人回答吗
wenbo228228 2014-11-01
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
你的工程属性编码还是指定的是Unicode编码
是的,工程是宽字符。我想知道为什么CString要把我的多字符转换成宽字符
Eleven 2014-11-01
  • 打赏
  • 举报
回复
你的工程属性编码还是指定的是Unicode编码
lx624909677 2014-11-01
  • 打赏
  • 举报
回复
CString是一个类,包含的不只有字符串,包含的不只有字符串

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧