public class FileOutputStreamDemo2 { public static void main(String[] args) throws IOException { //我MyEclipse设置的默认编码方式为gbk FileOutputStream fos = new FileOutputStream("111.txt"); String str = "java咖啡馆"; //"java咖啡馆"以gbk编码方式变成的字节数组如下: byte[] gbkData = {106 ,97 ,118, 97, -65, -89, -73, -56, -71, -35};//共10字节 fos.write(gbkData); //"java咖啡馆"以utf-8编码方式变成的字节数组如下: byte[] utf8Data = {106 ,97, 118, 97, -27, -110, -106, -27, -107, -95, -23, -90, -122 };//共13字节 fos.write(utf8Data); String str2 = new String(utf8Data); //显示乱码 System.out.println(str2); } } 首先:我电脑的默认编码方式为gbk 问题1:为什么用同一个字节流往文件里面写字节,一次写10个字节,一次写13个字节,会得到同样的结果? 字节流往文件里面写字节的时候应该要按照某种编码方式把写进来的字节转换成字符吧, 10字节与13字节转换后怎么可能变成同样的结果? 问题2:既然fos.write(utf8Data);这条语句把utf-8方式得到字节数组写进文件再变成字符串的时候不显示乱码 而System.out.println(str2);这条语句由utf-8方式得到的字节数组变成字符串又显示为乱码
我的意思是:既然我电脑设置的默认编码方式为gbk,那么结果应该如下 gbkData 这个字节数组,写进文件后以gbk方式可以正常把字节数组变成"java咖啡馆"显示出来 utf8Data这个字节数组,写进文件后以gbk方式应该显示乱码 System.out.println(str2);这条语句显示乱码 1、你把UTF-8编码的数据写进文件,你怎么知道打开的时候编辑器用的是GBK编码?一般编辑器都能智能识别编码的,如果它发现用GBK解码出错,那就会换一种编码尝试解码。 2、UTF-8数据打印到屏幕上乱码是因为你解码成字符串的时候指定了错误的编码 String str2 = new String(utf8Data);这样用的是默认编码,所以你这样就是用GBK编码去解码UTF-8,当然乱码 要这样指定编码才行:String str2 = new String(utf8Data, "UTF-8");
|