InputStream 读取文件的时候,是以字节的形式读取的,那么假如一个文件里边是汉字的话,读取出来然后打印才DOS窗口的话,就会出现乱码!但是,现在有一个问题,如果是InputStream  从一个文件里边读取数据,而这个文件里边是汉字,然后用OutputStream接收的话,就是说  OutputStream os = new OutputStream(new File("a.txt"));  InputStream is = new InputStream(new File("b.txt"));   os.read(is);  用一个循环将is里边的汉字读到os里边的时候,那么b.txt里边的全部汉字就可以完全读到a.txt里边,而不出现乱码,这是什么原因呢?愿听详解!

解决方案 »

  1.   

    那是因为a.txt的编码(比如utf-8)和你的DOS窗口编码(比如gbk)不同。
    你可以显式地把读出来的字节,按照DOS窗口的编码转成字符,再打印就可以了。
    比如:String(byte[] bytes, Charset charset)而你直接将a.txt按字节写到b.txt时,文件头部会有标识这个文件编码的信息,
    你用编辑器打开b.txt时,编辑器就会使用正确的编码读取b.txt的内容。还有一种方法:改变DOS窗口的显示编码,也可以正确地显示a.txt中的汉字
      

  2.   

    txt文件,是另一种显示,读取逻辑
      

  3.   

    一楼的朋友,你好,InputStream字节流不是是按照字节进行读取的吗?而汉字是两个字节,它读取一个字节的话,那么就是读取半个汉字,打印出来是乱码,很正常的!同样是读取,为什么读到txt文件里边就是正常的呢?我想的是,它要是读到txt文件里边之后如果也是乱码的话,就是比较正常的了如果更改编码以后,InputStream就可以按照字符型读取数据吗?