查看文章 |
老问题了,今天才知道怎么解决,不过还不知道所以然,希望知道的能够补充上来。 在用VC2005(E文)处理文件名为中文的文件时,总是不能够打开文件,以前总是把用一个wstring类型的字符串来保存文件名,可以正常处理,但是这有个弊端,就是不能够自己输入文件名(起码用cin实现不了)。如下: 解决1:wstring fileName = L"呵呵.txt"; fstream fin; fin.open(fileName.c_str(),ios_base::in); while(getline(fin,content)) cout << content << endl;
今天又遇到这个问题了,上网查了资料,发现是代码页的问题,比如你要打开当前路径下的 《呵呵.txt》文件,则需要如下写: 解决2: string fileName; cout << "输入文件名" << endl; cin >> fileName; locale loc1 = std::locale::global(std::locale(".936"));//设置代码页为简体中文,936是简体中文的代码页。 fstream fin; fin.open(fileName.c_str(),ios_base::in); std::locale::global(std::locale(loc1));//恢复原来的代码页 string content; while(getline(fin,content)) cout << content << endl; 如上就实现了在VC2005(E文)下读文件名为中文的文件操作。 得出了如下结论: 1:VC2005(E文)默认的代码页不是简体中文,应该是英文的 2:在默认情况下,只要打开文件后就可以处理文件内容为中文的文件 解决1中用wstring存放文件名,实现了打开,然后就可以读取了 解决2在设置简体中文代码页后就可以打开了,然后又恢复为默认的,就可以读取0了,但是为什么不恢复为默认代码页,在打开文件后就不能够读取了呢?? 暂时想到这些了,有补充的欢迎补充。 ps:windows是以 unicode为默认编码方式的,所以对含有中文名字的文件来说,必须要wstring 来表示文件名,否则的话就找不到文件,自然打不开了。 |