为什么print到命令行 中文显示的是乱码,而写到文件里面的中文却能正常显示?
FileOutputStream和FileInputStream不是字节流么?为什么写到文件里中文还能正常显示呢?
我是用记事本打开目的文件查看的,记事本的字符集是chinese_gb2312。
注:我觉得好像不是记事本的原因,因为按字节读的话,如果读的是乱码,写入的应该也是乱码。//源代码
import java.io.*;
public class TestFileOutputStream {
  public static void main(String[] args) {
  int b = 0;
  FileInputStream in = null;
  FileOutputStream outp = null;
  try {
    in = new FileInputStream("E:\\项目及实例\\常用类\\IO\\TestFileOutputStream.java");
    outp = new FileOutputStream("d:\\HH.java");
    while((b=in.read())!=-1){
System.out.print((char)b);
      outp.write((char)b);
    }
    in.close(); 
    outp.close();
  } catch (FileNotFoundException e2) {
    System.out.println("找不到指定文件"); System.exit(-1);
  } catch (IOException e1) {
    System.out.println("文件复制错误"); System.exit(-1);
  }
  System.out.println("文件已复制");
  }
}
下面的是在CMD下的显示
==================================================================
E:\项目及实例\常用类\IO>java TestFileOutputStream
import java.io.*;
public class TestFileOutputStream {
  public static void main(String[] args) {
          int b = 0;
          FileInputStream in = null;
          FileOutputStream outp = null;
          try {
            in = new FileInputStream("E:\\?????°????\\?????à\\IO\\TestFileOutpu
tStream.java");
            outp = new FileOutputStream("d:\\HH.java");
            while((b=in.read())!=-1){
                System.out.print((char)b);
              outp.write((char)b);
            }
            in.close();
            outp.close();
          } catch (FileNotFoundException e2) {
            System.out.println("?????????¨????"); System.exit(-1);
          } catch (IOException e1) {
            System.out.println("?????????í?ó"); System.exit(-1);
          }
          System.out.println("??????????");
  }
}
文件已复制
E:\项目及实例\常用类\IO>
而目的文件中的内容和源文件(代码)完全一样,没有乱码。

解决方案 »

  1.   

    怎么转啊?能给讲讲么~~ 我把代码稍微给了下
    System.out.println(b);
    outp.write(String.valueOf(b).getBytes());
    outp.write(13);
    结果发现命令行的输出和目标文件一样,都是一堆一样的数字,为什么会这样啊?
      

  2.   

    outp.write((char)b); 这个(char)是多余的,这个方法是把字节b写入文件,
    没错一个汉字被拆成两个字节分别写入文件,但是在用记事本打开的时候,记事本识别出这紧挨的两个字节是汉字,所以显示成汉字
    而System.out.print((char)b)作用就是在屏幕打印一个字符,所以一个汉字被当两个打印了