java 流里面,字节流是读取一个字节,为什么我读中文的时候没有乱码呢?

[复制链接]
查看11 | 回复3 | 2011-10-30 11:28:52 | 显示全部楼层 |阅读模式
我拿字节流读取一个文件,输出到另一个文件里,里面有汉字,拿字节流读得时候不是会出现乱码吗,为什么我测试,另一个文件输出的结果是正常的,没有乱码?代码:FilefileIn=newFile(\"e:/test.txt\");BufferedInputStreambis=newBufferedInputStream(newFileInputStream(fileIn));FilefileOut=newFile(\"e:/test2.txt\");BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(fileOut));if(!fileOut.exists())fileOut.createNewFile();intx;while((x=bis.read())!=-1){bos.write(x);}bis.close();bos.close();
回复

使用道具 举报

千问 | 2011-10-30 11:28:52 | 显示全部楼层
用字节流读包含中文的文件出现乱码是不可避免的,简单的想想:单第一个字为英文,第二个子为中文,而一个英文占1一个字节,一个中文占两个字节,当你用两个字节的的数组读取,中文字就会被拆分,这样就肯定会出现乱码。给你个解决方法,我用的JDK1.5,完全解决了你的需求,代码如下:importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;publicclassStart{publicstaticvoidmain(String[]args){FilefileS=newFile(\"E:/123.txt\");if(!fileS.exists()){System.out.println(\"找不到指定文件\");return;}FileInputStreamfileIS=null;try{fileIS=newFileInputStream(fileS);byte[]byt=newbyte[2];intdata=fileIS.read(byt);for(;data!=-1;){inta=byt[0];intb=byt[1];if((a=0=127)127||b0)){System.out.print((char)a);data=fileIS.read();byt[0]=(byte)b;byt[1]=(byte)data;}Stringstr=newString(byt);System.out.print(str);data=fileIS.read(byt);}System.out.println();}catch(FileNotFoundExceptionex){ex.printStackTrace();}catch(IOExceptionex){ex.printStackTrace();}finally{if(fileIS!=null){try{fileIS.close();}catch(IOExceptionex){ex.printStackTrace();}}}}}
回复

使用道具 举报

千问 | 2011-10-30 11:28:52 | 显示全部楼层
应该是在bos.write(x);后面加一句bos.flush;,试试。赞同
回复

使用道具 举报

千问 | 2011-10-30 11:28:52 | 显示全部楼层
从你的代码里看,你所做的操作就是复制而已你复制记事本一到记事本二,内容一样难道还不正常了???乱码并不代表数据错误,乱码不乱码,那都是你看到的,而文件数据要让你看到,中间要经过解码,也许是数据本身有问题,也许是解码过程有问题,也许是展示的控件有问题。乱码的产生原因是多种多样的,只有深入研究了编码的原理和显示文字的一些基础理论,才能举一反三赞同
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行