VS2010诡异的文件输出流解决思路
VS2010诡异的文件输出流先看如下代码C/C++ code#includeiostream#includefstreamusing namespace std
VS2010诡异的文件输出流 先看如下代码
C/C++ code#include<iostream>#include<fstream>using namespace std;int main(){ ofstream fout("1.txt"); char a[100] = "木"; fout<<a<<endl;} 此代码在VS2010下调试出来的结果,文档中输出一个乱码,可是如果在最后一行代码上加上cout<<a<<endl;在命令行输出的是“木”,为什么在文档中就不会出现?
还有更奇怪的,如果把“木”改成“我”,就会在文档中正常输出,改成“小”,依然是乱码;
还有更奇怪的,如果在把最后一句改成fout<<"我"<<a<<endl;这样在文本中也会正常的输出“我木”!
哪位大神知道原因,请赐教!
[解决办法] 呵呵,微软的bug
以前听说过,你用记事本写个联通保存进去,然后打开就是乱码
眼见不为实
[解决办法] 应该是源代码的编码和控制台编码不一致导致的
楼主用setlocale设置下
另外,文件打开使用的编码格式也要和写入的内容格式一致
[解决办法] 你用写字板打开就是对的
不是unicode的问题。
而是记事本对宽字符支持的问题。
[解决办法] 探讨 引用: 你用写字板打开就是对的 不是unicode的问题。 而是记事本对宽字符支持的问题。 用写字板打开的确可以显示“木”,为什么在前面加个“我”,后面就可以输出“木”了呢?[解决办法] 或者看看这篇文章:
http://en.cppreference.com/w/cpp/locale/codecvt_byname
[解决办法] 越描越黑啊。
给你2个注意的地方
1.设置Locale。
2.使用宽字符流。
3.检查你的console编码。
[解决办法] 探讨 引用: 引用: 你用写字板打开就是对的 不是unicode的问题。 而是记事本对宽字符支持的问题。 用写字板打开的确可以显示“木”,为什么在前面加个“我”,后面就可以输出“木”了呢? 你能用记事本看见“我”,估计是个巧合。我在英文版的Win7上试过,“我”与“木”都不可以输出。传统的……[解决办法] Ansi不可以保存中文。在中文Windows上,ansi(准确的说是mbcs)的默认编码是GB2312,所以你能保存中文。但到了英文Windows上,由于默认代码页是437(OEM - United States),打开文件就变乱码。这种依赖代码页的文件是不可靠的。最好用Unicode文件,在Windows下是有BOM的,能自动识别。