您的位置:首页 > 编程语言 > Java开发

java解码与编码若干问题

2013-09-15 18:35 302 查看
下面大家请看我的代码,基本了解下,怎么得到字符串的unicode,utf-8编码,gbk编码,以及了解如何获取系统的默认字符集编码。







请看第9行代码就是怎么获取系统默认字符集,windows一般是gbk,linux一班是Utf-8.

对于初学者来说,最难理解的是,这么多编码,什么时候是用这个编码,什么时候是用那个编码,这也是我当时最头疼的事。

下面我们先了解下什么是编码什么是解码。
看我下一段代码:




就2行关键代码。
可能大家还是有些疑惑,那么我来提几个问题,看大家能否回答。

String str="你好";
"你好"是以什么方式存在于内存呢?
unicode,在java中你没把字符串进行编码,那么他就是以Unicode方式存在于内存的。
怎么存放?
String 其实是一个char字符数组."你好"相当于2个长度的char数组来存放。
char 字符怎么存放,unicode,所以归根到底 String对象在你没对他进行编码的时候,他就是以Unicode存放于内存的.
有人可能对这一行有疑问
byte[] buf=str.getBytes();
他认为,这里我没对字符串进行编码啊,我只是要得到他的字节码的数组啊,为什么你说对他进行了”gbk“编码。是这样的,当你操作系统是windows的时候,你这样写就等于
bytep[] buf=str.getBytes("gbk");
当你调用字符串getBytes的方法时,你是一定会以一种不是unicode的字符集对字符串进行编码的。
只是你还没对这一点有清楚的认识。

String str=new String(buf,"gbk");
这个过程叫做解码。
buf数组里面存放了“你好”的gbk编码,现在我要创建一个String对象,这里要指出,你的String对象其实是char数组。char是以Unicode嘛存放字符的,所以要解码,把用其他编码方式的字节码数组,解码成Unicode的字符串。当然你后面解码的字符集,必须要和你编码时的字符集对应,否则不是乱套了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: