ifstream读取中文为乱码 本帖最后由 awenson 于 2009-11-15 17:08:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #include <iostream.h>#include <fstream>#include <string>using namespace std;int main(){ ifstream ifile("xxx.txt"); char buf[100]; ifile.getline(buf,100); cout<<buf; // 此处读出的英文和数字正常,中文乱码}这个程序测试结果:txt为ansi,中文正常显示。unicode,utf-8,unicode big endian中文不能正常显示。 不好意思啊,弄错了我程序中是使用宽字符。wifstream ifile(L"C:\\xxx.txt");wchar_t buf[MAX_PATH] = {0};ifile.getline(buf, MAX_PATH); // 此处读出的英文和数字正常,中文乱码使用多字节是正常的,使用宽字符反而有问题 宽字符要指定字符集,setlocale(LC_CTYPE, ""); 加在函数头 嗯,可以设置locale,这样的话也能解决:ifile.imbue(locale("chs")); 不行的,使用Unicode的话还要codecvt。 谁能提供使用Unicode文件的方法? 【求助】SDK创建的list-view控件怎么添加图像列表? VC 保存 MSChart 为图片文件怎么做? CTreeCtrl的棘手问题:(插入的内容无法显示出来)! COM组件注册时,弹出对话框,大家帮忙看看啊啊 如何设置CStatic的背景颜色? 请问,我在设置系统分辨率时,不指定显示器的刷新频率行吗? 一个有关没有定义的编译问题,请各位大虾看看 如何按回車改變對話框中控件位置? delete 和 delete [] 有何区别? COM问题??? MFC中,弹出对话框与分隔窗口,冲突!!!急!!! 定时删除ListControl的某一行
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream ifile("xxx.txt");
char buf[100];
ifile.getline(buf,100);
cout<<buf; // 此处读出的英文和数字正常,中文乱码
}
这个程序测试结果:
txt为ansi,中文正常显示。unicode,utf-8,unicode big endian中文不能正常显示。
我程序中是使用宽字符。
wifstream ifile(L"C:\\xxx.txt");
wchar_t buf[MAX_PATH] = {0};ifile.getline(buf, MAX_PATH); // 此处读出的英文和数字正常,中文乱码
使用多字节是正常的,使用宽字符反而有问题
嗯,可以设置locale,这样的话也能解决:ifile.imbue(locale("chs"));
不行的,使用Unicode的话还要codecvt。