j2se---编码

[code]

String str = "中国";
打印他的unicode 编码
for(int i=0;i< str.length;i++){
System.out.println(Integer.toHexString((int)str.charAt(i))); //我们得到的char都是Unicode类型的,在没有转换之前都是Unicode类型
}

输出的结果是:
4e2d
56fd

Byte[] buf = str.getBytes("gb2312"); //这是按照转换成gb2312的编码,放入buf中

for(int i=0;i<buf.length;i++){
System.out.println(Integer.toHexString(buf[i]));
//注意:Integer.toHexString是接受一个Int,但是传给他一个byte,那么他会自动补全前三个字节,如果是正数,用0补,是负数,用1补
}
输出的结果是:
ffffffd6
ffffffd0
ffffffb9
fffffffa


for(int i=0;i<buf.length;i++){
System.out.write(buf[i]); //写入到屏幕缓冲区中
}
System.out.println();//只是为了让他调用刷新函数

输出的内容为: 中国 ----//这一点告诉我们如果想要显示到屏幕上,那么放入的字符一定要是本地字符

System.out.println("中国");//这个也能打印中国
因为System.out 是PrintStream的实例对象
PrintStream.println(String str);实际上会把中国现转换成国标码然后在加到底层输出流中,所以这个方法调用了 getBytes然后再调用了write方法

注意:这个System.out.write(buf,0,4);//这个会刷新缓冲区哦,因为人家写了多个嘛

那么怎么查看本地字符集呢?

因为这些属性都是JVM的缺省属性,所以看 System.getProperties()方法
System.getProperties().list(System.out);//把JVM属性列表到屏幕上
其中有一项file.encoding=GBK就是我们要查看的

System.setProperty("file.encoding","iso8859-1");//我们手动设置了JVM的环境属性

new String(buf,0,len);会把buf这个字节数组按照本地字符集大字典,转换成Nnicode码,因为String 永远是Unicode的
new String(buf,0,len,"gb2312");//这个他认为buf是gb2312,所以他把这个东西按照gb2312来转换成Unicode码,也就是他先找到这个buf对应的实际的字,然后再找到Unicode的这个字,然后再找到Unicode这个字对应的Unicode码,简单一点就是找到buf的文字,然后JVM会自动对照转成Unicode,为了很好的记忆并简化理解,我们通常把buf到String的过程称为解码。。。这里是按照本地字符集解码

如果我们知道他是用的什么解码,而他解码出来是乱码,那么他肯定解码错了,
所以我们通常再编码回去。。。。byte[] buf = str.getBytes("iso8859-1");//这里是已知他用iso8859-1解码错误,所以我们再编码回去
这样就可以得到原始的字节数组,再解码一次呗

new String(buf,0,len,"gb2312");


[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值