java中字符串编码的转换以及乱码后的处理总结
来源:互联网 发布:独立域名是什么 编辑:程序博客网 时间:2024/06/05 22:44
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”);即可还原
- java中字符串编码的转换以及乱码后的处理总结
- java中字符串编码的转换以及乱码后的处理总结
- Java中字符串编码方式的转换
- 转换一个字符串的编码消除乱码
- java转换字符串的编码
- java转换字符串的编码
- java转换字符串的编码
- 【java学习】java中字符串转换编码的代码片段
- JNI 中文字符串转换乱码的处理
- C#实现camel字符串转换(以及查阅后总结的一些其他C#中string类中的方法)
- Java中编码转换:怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?
- 【基础知识】字符集编码、Java中编码的格式以及乱码产生的原因
- Java实现正则匹配出script标签中字符串包含某个几个单词的所有行,以及编码转换
- Python判断字符串编码以及编码的转换
- 关于java和php以及html的所有文件编码和乱码的处理汇总
- java中对图象文件的处理(读写以及转换)
- java中对图象文件的处理(读写以及转换)
- Python编程-字符串的编码转换、存储及乱码问题
- Android 编译问题
- Struts2学习笔记——OGNL表达式
- Android权限之sharedUserId和签名
- 场驱动力可视化 渐变彩虹条带
- VS 2015跨平台移动开发简单感受
- java中字符串编码的转换以及乱码后的处理总结
- 6.hibernate的批量更新
- R语言与数据分析之四:聚类算法2
- Oracle操作前验证是否已经存在
- 程序加载一个动态链接库dll
- 9.4 具体的对象类型
- 如何用Qunit测试你的JavaScript代码
- 重构技术分享
- SSH error:a public key file has not been specified by this session