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

java中字符串编码的转换以及乱码后的处理总结

2014-12-12 10:30 253 查看
java中编码的转换。

常见的编码也就ISO8859-1,GBK,GB2312,UTF-8

java里有String这个类存储并处理字符串,同样String里有个方法叫getBytes(),这个方法起着编码转换的作用。

API里这样解释这个方法:

Encodes this String into a sequence of bytes using the named charset, storing the

result into a new byte array. (用某种编码加密这个字符串,保存到byte数组中)

举个例子吧:

utf-8的String对象转gb2312的String对象

有个以utf-8保存的字符串对象"你好",对象名是str

其UTF-8的二进制代码是-28-67-96-27-91-67

你若用UTF-8的规则去读这个二进制编码,对外表现就是“你好”这两个大字。

若用其他编码规则去读,那就是所谓的乱码。(String对象里已处理,所以输出永远是正确的‘你好’)

你若用str.getBytes("utf-8") 得到的就是-28-67-96-27-91-67这个数组

若new String(-28-67-96-27-91-67, "utf-8")就会再次得到utf-8的“你好”字符串

但是你若想把str:"你好"这个以utf-8形式保存的字符串对象转换为gb2312保存的String对象时该怎么办呢。

很简单,用getBytes()这个方法

"你好".getBytes("gb2312")就可以得到这个字符串对应的gb2312编码规则的byte数组

即-60-29-70-61

然后在new String (-60-29-70-61, "gb2312")就可以得到gb2312的"你好"的String对象了。

总结,字符串编码转换,只要被转换的字符串的编码是正确的,没有乱码的情况,只要

String 转换后的字符串 = new String("源字符串".getBytes("目标编码"),"目标编码");

————————————————————————————————

当然有时候我们也会处理得到的是乱码字符串,想把他矫正的情况。上面的方法就不适用了,

但是原理一样,

比方说jsp以get方式url传递数据的时候,因为Tomcat默认是以ISO8859-1形式传递的,

若中文传递到servlet,我们直接request.getParameter()得到的字符串会乱码。

因为中间Tomcat会把我们的url以ISO8859-1编码进行urlEncode,我们后台得到数据后再以ISO8859-1

解码,我们request.getParameter()得到的字符串对象就不我们想要的东西,

这个时候只要逆着来一遍得到以原先编码的二进制,然后再new String即可

new String(str.getBytes("ISO8859-1"),"原来的编码");

即可得到正确的。

上述过程其实是这样的

1、我们发送的数据,str是utf-8字符串,二进制是:-28-67-96-27-91-67('你好')

2、tomcat把它的二进制编码用ISO8859-1进行读后new了个String str2 =(str.getBytes("utf-8"),"ISO8859-1")

虽然这个字符串二进制还是-28-67-96-27-91-67,但str2里储存的读取方式是ISO8859-1肯定乱码。

3、我们得到这个乱码字符串str2后,首先,str.getBytes("ISO8859-1"),因为str2对象里储存的编码方式就是ISO8859-1,所

以不会改变二进制,也就是说得到是还是-28-67-96-27-91-67,这个是原来utf-8下的“你好”,

现在只要再new String(那个byte数组,“utf-8”);即可还原
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: