java问题,被IO流中文乱码搞晕了

原本我的工具Myeclipse我编码设为UTF-8。我一个txt文件内容读到另一个txt文件,用字节流没中文乱码,字符流出现乱码。接着我有把工具编码设为ISO8859_1,字符流中文乱码没了,但是字节流也没中文乱码(我特意把字节数组长度设为1),这我就感觉不对劲了,不是说字节流应该出现中文乱码吗。还有就是工具编码改为UTF-8,字符流就会出现中文乱码这个问题是为何。另外txt文件中的内容我在控制台打印的内容也是乱码。
字节流部分代码
File file=new File("E:/2.txt");FileInputStream fis=new FileInputStream(file);File file2=new File("E:/4444.txt");
fos2=new FileOutputStream(file2);
if (file2.isFile()) {file2.createNewFile();}
byte[] b=new byte[(int)file.length()];
byte[] b2=new byte[1];
String s;
while((fis.read(b2))!=-1){
s=new String(b2);
fos2.write(b2);
System.out.print(s);
}
字符流部分代码
fr = new FileReader(file);
br = new BufferedReader(fr);
fw=new FileWriter(file2);
bw=new BufferedWriter(fw);
System.out.println(fr.getEncoding());
System.out.println(fw.getEncoding());
String str;
while ((str = br.readLine()) != null)
{
bw.write(str);
bw.newLine();
System.out.print(str);
}
控制台打印也出现乱码(就算打印到txt里没有乱码),无论字符流还是字节流。以上这些问题我不知怎么解释,好矛盾啊。
只剩这个问题了----我有把工具编码为ISO8859_1。现在把一个txt里文件的内容写到另一个txt:字符流没中文乱码这个好解释,但是字节流也没中文乱码(我特意把字节数组长度设为1,控制台打印出现乱码的),发现就是我编码无论怎么改为何什么字节流都没出现乱码啊。不是说字节流应该会出现乱码吗?

    你读取用utf-8,那如果你txt文本是用其它的编码方式肯定会出现乱码

    你字节流一次读取一行,这样转化就不会出现一个字符的两个字节被分开读取并输出的状况,不会出现乱码

    utf-8 是可变长编码,如果你程序选择的编码方式是定长编码方式,读取字符时肯定是会出现乱码

追问

有点看不懂。1.我有把工具编码设为ISO8859_1,字符流没中文乱码,但是字节流也没中文乱码(我特意把字节数组长度设为1),就是我编码无论怎么改为何字节流都没出现乱码啊。一般不是应该会出现的吗。2.编程工具编码UTF-8情况下,我把txt也另存为UTF-8编码,字符流写入到txt还是乱码.(这解决了,控制台Run Configuration的Common里,控制台的字符编码设置成GBK就好了)

追答

ISO8859_1是西文单字节编码,不可存中文,怎么可能存在“中文乱码”一说,你仔细查一下你的文本真的是ISO8859_1编码吗??

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-29
控制台乱码,是因为简体系统中的控制台是GBK编码的
相似回答