日期:2014-05-20  浏览次数:20747 次

java 输入输出乱码问题
大家看一下这段代码,打开被写入的文件如下图,"博客园"乱码我是懂的,我的问题是:为什么HELLO还能正常显示?

FileOutputStream outStream = new FileOutputStream("D:"+File.separator+"test"+File.separator+"hello.txt");
OutputStreamWriter outWriter = new OutputStreamWriter(outStream,"ASCII");
BufferedWriter writer = new BufferedWriter(outWriter);
writer.write("HEllO博客园");
writer.close();





------解决方案--------------------
ASCII---改成UTF-8试下或者GBK也可以
------解决方案--------------------
HEllO ASCII码里有这些,所以才不会乱码
------解决方案--------------------
所有的编码都是以ASCII为基础的。除了Unicode以外,其它编码的单字节码0x00-0x7F都和ASCII一致。

也就是说:
HEllo不管在GB2312、GBK、BIG5、UTF8……哪一种编译下面都是
0x48456c6c6f

PS:Unicode与其它变长码不同,它是定长的(2Byte)。例如"AB"在其它编译里是
0x4142
在Unicode里是
0x00410042
------解决方案--------------------
hello不管你是ISO的还是utf-8亦或gbk都不会乱码的,他总能被正确识别的
------解决方案--------------------
探讨
所有的编码都是以ASCII为基础的。除了Unicode以外,其它编码的单字节码0x00-0x7F都和ASCII一致。

也就是说:
HEllo不管在GB2312、GBK、BIG5、UTF8……哪一种编译下面都是
0x48456c6c6f

PS:Unicode与其它变长码不同,它是定长的(2Byte)。例如"AB"在其它编译里是
0x4142
在Unicode里是
0x00410……

------解决方案--------------------
探讨

我想问的是:GBk采用双字节表示, ASCII采用单字节,“HELLO”存在计算机上的是单字节,但我们用打开被写入的记事本文件时,它会采用GBK进行解码,也就是把原来的两个字节解码成了一个字符,为什么还是能够正确显示“HELLO”呢?莫非解码的过程不是我说的这样的?