为什么是显示乱码,UNICODE的问题吗?

shuizhiyun 2008-10-31 02:12:55
为什么是显示乱码,UNICODE的问题吗?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void CmfctestDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();

wifstream infile(L"interpreter.txt", ios::in);
if (!infile)
{
AfxMessageBox(L"can not open");
}
wstring str;
getline(infile, str);
AfxMessageBox(str.c_str());

infile.close();
}

那个txt文件我在记事本下改成了各种格式保存都不行,各位给我个解决办法吧,求你们了
...全文
202 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuizhiyun 2008-11-04
  • 打赏
  • 举报
回复
文件的格式是ANSI或UNICODE都行,关键是要把读入的字符放入wstring中,而且不要乱码
shuizhiyun 2008-11-03
  • 打赏
  • 举报
回复
楼上的,我已经设置好了,否则字符串前面加个'L'是不能通过编译的。
matrixcl 2008-10-31
  • 打赏
  • 举报
回复
主要取决于你的工程里是否声明了 UNICODE/_UNICODE 这个宏。 VC6默认是未声明的,VS2005默认是声明过的。

声明过这个宏之后,AfxMessageBox最终会调到系统API MessageBoxW, 未声明调用 MessageBoxA。 前者用于unicode字符串,后者用于ansi。

从你的题意看,你的文本里存的应该是unicode字符串,而工程未定义这个宏。

有几个解决方法。
1.添加这个宏 UNICODE/_UNICODE 。 如果是个大工程还是不要这样用了,因为很多地方都要转换
2.直接调用MessageBoxW
3.用 WideCharToMultiByte/MultiByteToWideChar 转码。这个麻烦点,建议你搜下相关用法
帅得不敢出门 2008-10-31
  • 打赏
  • 举报
回复
AfxMessageBox(str.c_str());
可能是这句有问题 与格式有关吧

你单步调试到
getline(infile, str);
看看str的内容是否正确

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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