本帖最后由 我能学编程吗 于 2013-11-3 01:44 编辑
看张孝详老师的基础视频,有讲到字符编码的知识,看着他的代码一模一样的敲都得不到相同结果,我简化后如下:- //iso8859-1:西方国家使用的字符集
- System.setProperty("file.encoding","iso8859-1");//修改JAVA系统使用的默认字符编码为iso8859-1
- System.getProperties().list(System.out);//打印JAVA系统属性,从中查看file.encoding字符集
- String strChina="中国";
- byte [] buf=strChina.getBytes();//按默认字符集(即iso8859-1)对strChina编码,并转换成byte[]
- for(int k=0;k<buf.length;k++) {
- System.out.write(buf[k]);//这里传的必须是gbk编码的字节才能正确显示中文
- }
- System.out.println(); // 这里会自动调用flush,这样上面写的内容才会输出。说明System.out也是用了缓冲技术的。
复制代码 要求: 1、修改Java默认的字符集编码:System.setProperty("file.encoding","iso8859-1");
2、修改后String类的.getBytes();方法没指定字符集的话,就会使用默认的字符集编码,即上面设置的iso8859-1,所以上面代码中得到的buf编码应该是iso8859-1类型的
3、System.out.write(buf[k])写到显示器上,这里写的是iso8859-1编码字节的数据,我们知道电脑的默认是使用gbk进行显示的,应该传gbk编码的数据才能正确显示。
4、为什么电脑仍然输出的是正常的“中国”两字,说明我调用getBytes();方法的时候拿到的依然是gbk编码的字节数据,这是为什么啊?
麻烦大家跑一下这代码,看是输出“中国”,还是乱码。我看张孝详老师的可是会输出乱码的。
|