为什么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>
而目的文件中的内容和源文件(代码)完全一样,没有乱码。
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>
而目的文件中的内容和源文件(代码)完全一样,没有乱码。
System.out.println(b);
outp.write(String.valueOf(b).getBytes());
outp.write(13);
结果发现命令行的输出和目标文件一样,都是一堆一样的数字,为什么会这样啊?
没错一个汉字被拆成两个字节分别写入文件,但是在用记事本打开的时候,记事本识别出这紧挨的两个字节是汉字,所以显示成汉字
而System.out.print((char)b)作用就是在屏幕打印一个字符,所以一个汉字被当两个打印了