读书人

为什么是显示乱码UNICODE的有关问题

发布时间: 2012-04-06 12:22:24 作者: rapoo

为什么是显示乱码,UNICODE的问题吗?
为什么是显示乱码,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文件我在记事本下改成了各种格式保存都不行,各位给我个解决办法吧,求你们了


[解决办法]
AfxMessageBox(str.c_str());
可能是这句有问题 与格式有关吧

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

[解决办法]
主要取决于你的工程里是否声明了 UNICODE/_UNICODE 这个宏。 VC6默认是未声明的,VS2005默认是声明过的。

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

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

有几个解决方法。
1.添加这个宏 UNICODE/_UNICODE 。 如果是个大工程还是不要这样用了,因为很多地方都要转换
2.直接调用MessageBoxW
3.用 WideCharToMultiByte/MultiByteToWideChar 转码。这个麻烦点,建议你搜下相关用法

读书人网 >C++

热点推荐