c++ofstream打开txtjava写文件中文乱码读取出乱码,解决必采纳

前一阵子用C++写东西需要往java写文件中文乱码里写数据,很简单的代码大概是这个样子:

但我要是把a的值改成0x0a,毛病就出来了写出来的东西是:0D 0A 00 00 00!

要是把a改成0x770a或者是别嘚什么0a,只要是数字中某一个字节是0a写出来以后肯定变成0D 0A!比如0x770a就变成0D 0A 77!

更让人寒的是,即使规定写出的只能是一个字节即写:
只要a嘚值的高字节是0a,写出来一样变成0D 0A!也就是指定输出1个字节实际却输出了2个字节!

真是让人费解啊。我一度认为C++出现了有史以来最莫名其妙的BUG不过,且慢……

0A是什么0D 0A又是什么?这个问题的解原来在这里先查查C++的文档,里面说明ofstream的open函数,第二个参数指明打开方式缺省为ios_base::out,即按照字节流的方式输出文本再看看0A到底是什么,原来ASCII的0A是换行也就是/n,再想想Windows系统下的换行是如何处理的?/r/n啊原来……

原来按照字节流的形式输出文本时,ofstream会自动将输出的/n变成/r/n以适应WIndows系统,结果以输出数据的角度看来这个正常的举动就变成了不可解嘚“0A变成0D 0A”。


ifstream读取java写文件中文乱码时如果使用in>>ch方法,则ifstream会自动将空格去除故0x20不会读取,同样加入读取参数ios::binary后问题解决。

2. 文本java写文件中文乱码的内容用utf-8的格式来写

3. 文本java写文件中文乱码保存成什么格式没有具体的要求,最好保存成ANSI, 如果保存成 utf-8的话,在第一行开头会出现下面的问题 "锘?" 或 "鄘?"

然后获取资源java写文件中文乱码中萣义的属性值出现乱码

在资源java写文件中文乱码中添加如下:

我要回帖

更多关于 java写文件中文乱码 的文章

 

随机推荐