一个本地的文本文件(含中文), 使用ultraEdit编辑的, 编码方式采用的默认(GBK). 文件显示正常. 
现对文件进行内容复制, 代码如下:InputStream in = new FileInputStream("G:\\abc.txt");
InputStreamReader iReader = new InputStreamReader(in);
System.out.print(iReader.getEncoding());// 输出GBK
Reader reader = new BufferedReader(iReader);
...........OutputStream os = new FileOutputStream("G:\\def.txt");
Writer writer = new BufferedWriter(new OutputStreamWriter(os, iReader.getEncoding()));
...........得到的def.txt文件全是乱码.  
InputStreamReader iReader = new InputStreamReader(in, "UTF-8"); 这句这样写就OK了.
可是我不明白, abc.txt就是GBK的显示正常,  我读入之后也是用GBK向def.txt中写的, 可为什么def.txt就是乱码了呢?
为何一定要在读入的时候先转码为UTF-8?求详解, 谢谢!!!!

解决方案 »

  1.   

    iReader.getEncoding()得到的是操作系统的默认字符集而不是jvm的默认字符集
      

  2.   

    我们的机器编码应该是GBK方式的,而在JVM程序中读取Property文件的时候使用的是Unicode编码方式,你读入的文件是GBK,强制转为UTF-8可能会出现乱码,你事先指令UTF-8,就会按UTF-8的方式读入并解码!
      

  3.   

    我更相信你列出的程序,不太相信你的UltraEdit操作。
    我推测唯一合理的解释是abc.txt其实是UTF-8编码的。
    LZ可以查看abc.txt的二进制编码,看看是不是UTF-8编码的(UTF-8编码下中文一般3个字节)。
      

  4.   

    UltraEdit会自动检测文件的编码,所以很可能就是按照utf-8打开的