返回信息流自己建的读、写两个菜单,写的时候就直接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;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #76507同步于 2014/1/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[MFC]显示乱码问题
wanderer
2014/1/14镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
vc9.0好多都跟vc6.0不一样了,lz如果不是因为特殊爱好的话,就别照着vc6.0的代码啃了,大概看个他的思想(消息映射机制那一块他讲的还是很不错的),直接抛弃他的代码自己来吧
很少写unicode程序,无责任瞎猜一个,这里需要 _T 宏?
坐等lx大神解答
我项目是用unicode的,所以都加_T,但这个例子我试了不行!
【 在 ekittying 的大作中提到: 】
: vc9.0好多都跟vc6.0不一样了,lz如果不是因为特殊爱好的话,就别照着vc6.0的代码啃了,大概看个他的思想(消息映射机制那一块他讲的还是很不错的),直接抛弃他的代码自己来吧
: 很少写unicode程序,无责任瞎猜一个,这里需要 _T 宏?
: 坐等lx大神解答
【 在 wanderer 的大作中提到: 】
: 是的,编码这块,需要详细的搞清楚!
不同版本的window C程序进行移植了吧,这就是window程序员被不断淘汰的原因,微软一直在使坏,各种变化系统的函数名称和调用方案以及编码方式。骚年,弃暗投明吧,搞Linux C吧。
好吧 我一般写windows程序都是直接改成ASCII的……
借楼同等大神
【 在 wanderer 的大作中提到: 】
: 我项目是用unicode的,所以都加_T,但这个例子我试了不行!
建议Lz直接使用MessageBoxA。native API,来显示。
具体用法大概为MessageBoxA(this->GetSafeHwnd(), pBuff,"title",MB_OK);
具体细节请查阅MSDN。
你文本文件中的信息,默认就应该是ASCII的。所以使用Unicode的MessageBox是不现实的。
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()
: ...................