黑马程序员技术交流社区
标题:
修改默认字符集后依然能输出中文,怪了
[打印本页]
作者:
戴振良
时间:
2012-4-3 23:57
标题:
修改默认字符集后依然能输出中文,怪了
本帖最后由 戴振良 于 2012-4-4 00:34 编辑
在张孝详的IO视频中,有这么一段,把系统的默认字符集改为iso8859-1,则调用getBytes方法时会用默认的字符集来编码,我照着一模一样的做,可是我的却不行。
import java.io.*;
public class Test
{
public static void main(String[] args) throws Exception {
System.setProperty("file.encoding","iso8859-1");//------------>代码1
String str ="中国";
byte [] buf = str.getBytes();
for(int i = 0;i < buf.length;i++)
System.out.println(Integer.toHexString(buf[i]));
for(int i = 0 ;i < buf.length;i++)
System.out.write(buf[i]);
System.out.println();
}
}
复制代码
输出内容为:
ffffffd6
ffffffd0
ffffffb9
fffffffa
中国
这结果和注释掉代码1的结果是一样的,我不是把系统默认字符编码改为了iso8859-1了吗?为什么getBytes()方法并没有采用iso8859-1来获取字符的编码呢?
作者:
戴振良
时间:
2012-4-4 00:32
当我使用:byte [] buf = str.getBytes("iso8859-1");这个语句时,输出的结果才是iso8859-1的编码,奇怪了!
作者:
贠(yun)靖
时间:
2012-4-4 04:53
string 转换成 byte 有个重载方法
byte[] getBytes(Charset charset)
使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 charset就是要传的字符编码
所以你传("iso8859-1");的时候 就使用了它的编码表 而不是查找默认的gbk的码表
System.setProperty("file.encoding","iso8859-1");// 设置系统属性 应该改变不了默认查找码表吧
作者:
戴振良
时间:
2012-4-4 08:25
贠(yun)靖 发表于 2012-4-4 04:53
string 转换成 byte 有个重载方法
byte[] getBytes(Charset charset)
使用给定的 char ...
这在张孝详的视频IO视频中第10个视频里有,就是用这个,他的是可以的,不知道是不是机子不同,所以结果不同!
作者:
戴振良
时间:
2012-4-10 00:09
为什么我提的问题总是没什么人回答呀,问题还没解决呢又这样沉了,
请问怎样修改Java虚拟机的默认字符编码呀?
作者:
戴振良
时间:
2012-4-11 07:52
再顶再顶再顶
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2