java中用fileinputstream中的read方法读取一个文件中的数据并打印出来,文件中的中文打印出来后会出现乱码现象。据说是因为inputstream是字节流,read方法每次只能读取一个字节的数据,而中文在java中是用两个字节表示的,相当于只读了一半,所以打印不出来。这样分析看似很有道理,但是我查了一下,java采用的是unicode编码,所以字符都是用两个字节表示的,这样的话问题就出来了:为什么同是两个字节表示,中文读一半打印不出来,而英文却可以呢
调试欢乐多
char a += byte[1];System.out.println(c);
我问的是JAVA中所有字符都是两个字节表示的,为什么中文乱码,英文不乱码。
java底层实现的,对程序员来说是看不到的,具体怎么转换的不清楚!
个人理解不知道对不对。
英文字付是一个字节,用ASCII码。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "utf8")); 用这种方式读就可以指定编码,指定的编码与文件的编码一致,应该不会有乱码的
6楼指定了其编码格式是UTF-8,当然解码时也得用UTF-8。
System.out.println(br.nextLine().getBytes(),"UTF-8");
System.out.println(new String(br.nextLine().getBytes(),"UTF-8"));