package com.softstone.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;public class TestCharset { public static void main(String[] args) throws Exception {
String path = "i:" + File.separator + "file.txt";
InputStream is = new FileInputStream(new File(path));
byte[] b = new byte[8];

Writer out = new OutputStreamWriter(new FileOutputStream(new File(path)));
byte[] b2 = "中".getBytes("utf8");
out.write(new String(b2, "utf8"));
out.flush();

int i = is.read(b);
do {
for (int j = 0; j < i; j++) {
System.out.println(b[j]);
}
System.out.println(i);
System.out.println(i + "--" + new String(b, 0, i, "utf8"));
} while ((i = is.read(b)) != -1);

}
}
问题:
    为什么结果会是乱码呢?写数据和读数据的编码都统一了,怎么还会出现乱码呢?
望指点

解决方案 »

  1.   

    你指的乱码应该是指 在Java代码中输出的正确,但是用WIndows自带的记事本查看的时候乱码吧!若你的输入输出都使用“GBK”编码,应该就可以了吧(前提,你用的是中文Windows)如果你非得想存储为UTF-8,还必须用记事本正确查看,那你就必须确保文件有BOM头,FFEF还是EFFF,忘了,顺序与UTF-8还是UTF-16的存储顺序有关,用google百度下吧。
    当然,你现在的输出的file.txt 找一个支持不使用BOM头的文本编辑器就可以正确查看,比如Notepad2
      

  2.   


    public class TestCharset {    public static void main(String[] args) throws Exception {
            
    String path = "e:" + File.separator + "file.txt";
            InputStream is = new FileInputStream(new File(path));
            byte[] b = new byte[8];
            
            Writer out = new OutputStreamWriter(new FileOutputStream(new File(path)));
            byte[] b2 = "中".getBytes();
            out.write(new String(b2, "GBK"));
            out.flush();
    out.close();
            
            int i = is.read(b);
            do {
                for (int j = 0; j < i; j++) {
                    System.out.println(b[j]);
                }
                System.out.println(i);
                System.out.println(i + "--" + new String(b,"GBK"));
            } while ((i = is.read(b)) != -1);
          is.close();   
        }
    }