BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #76507同步于 2014/1/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[MFC]显示乱码问题

wanderer
2014/1/14镜像同步10 回复
自己建的读、写两个菜单,写的时候就直接char写到一个文件f.txt中,读f.txt的时候,在messagebox中显示乱码,求解答!(其实就是孙鑫VC深入详解12章的例子,6.0是可以的,但9.0好像不行) 如果我在项目配置里先多字节字符集是可以的,但用unicode就不行,大家有没有什么好的方法? void CMenuView::OnFileRead() { // TODO: 在此添加命令处理程序代码 FILE* pFile = fopen("f.txt", "r"); char* pBuff; fseek(pFile, 0, SEEK_END); size_t len = ftell(pFile); pBuff = new char[len+1]; //fseek(pFile, 0, SEEK_SET); rewind(pFile); fread(pBuff, 1, len, pFile); pBuff[len] = 0; fclose(pFile); MessageBox((LPCSTR)pBuff); //转换,烦!!! delete []pBuff; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
FromSixToTen机器人#1 · 2014/1/14
编码方式不同导致的吧
ekittying机器人#2 · 2014/1/14
vc9.0好多都跟vc6.0不一样了,lz如果不是因为特殊爱好的话,就别照着vc6.0的代码啃了,大概看个他的思想(消息映射机制那一块他讲的还是很不错的),直接抛弃他的代码自己来吧 很少写unicode程序,无责任瞎猜一个,这里需要 _T 宏? 坐等lx大神解答
wanderer机器人#3 · 2014/1/14
是的,编码这块,需要详细的搞清楚! 【 在 FromSixToTen 的大作中提到: 】 : 编码方式不同导致的吧
wanderer机器人#4 · 2014/1/14
我项目是用unicode的,所以都加_T,但这个例子我试了不行! 【 在 ekittying 的大作中提到: 】 : vc9.0好多都跟vc6.0不一样了,lz如果不是因为特殊爱好的话,就别照着vc6.0的代码啃了,大概看个他的思想(消息映射机制那一块他讲的还是很不错的),直接抛弃他的代码自己来吧 : 很少写unicode程序,无责任瞎猜一个,这里需要 _T 宏? : 坐等lx大神解答
FromSixToTen机器人#5 · 2014/1/14
【 在 wanderer 的大作中提到: 】 : 是的,编码这块,需要详细的搞清楚! 不同版本的window C程序进行移植了吧,这就是window程序员被不断淘汰的原因,微软一直在使坏,各种变化系统的函数名称和调用方案以及编码方式。骚年,弃暗投明吧,搞Linux C吧。
longju1989机器人#6 · 2014/1/14
要是练习还是别用unicode了,各种问题很麻烦
ekittying机器人#7 · 2014/1/14
好吧 我一般写windows程序都是直接改成ASCII的…… 借楼同等大神 【 在 wanderer 的大作中提到: 】 : 我项目是用unicode的,所以都加_T,但这个例子我试了不行!
ltmit机器人#8 · 2014/1/15
建议Lz直接使用MessageBoxA。native API,来显示。 具体用法大概为MessageBoxA(this->GetSafeHwnd(), pBuff,"title",MB_OK); 具体细节请查阅MSDN。 你文本文件中的信息,默认就应该是ASCII的。所以使用Unicode的MessageBox是不现实的。
erabbit机器人#9 · 2014/2/6
1.将你标红的 LPCSTR 改成 LPCTSTR 2.Unicode字符串最后只加一个0可能不够,要加两个0: pBuff = new char[len + 2]; ... pBuff[len] = 0; pBuff[len + 1] = 0; 【 在 wanderer 的大作中提到: 】 : 自己建的读、写两个菜单,写的时候就直接char写到一个文件f.txt中,读f.txt的时候,在messagebox中显示乱码,求解答!(其实就是孙鑫VC深入详解12章的例子,6.0是可以的,但9.0好像不行) : 如果我在项目配置里先多字节字符集是可以的,但用unicode就不行,大家有没有什么好的方法? : void CMenuView::OnFileRead() : ...................