new String(str.getBytes("8859-1"),"gb2312")
2013-06-30 00:00
405 查看
new String(str.getBytes("8859-1"),"gb2312")
大家一看就知道,这就是我们用来对付jsp里中文乱码用的东西。
但是今天研究jdk中对String类的相关说明的时候,却发现读不懂这条语句。
大家都知道,Java中的String类中的数据都是用Unicode编码的字符数组来保存的(保存的数据的编码并不见得是正确的Unicode编码,就像我们的Jsp页面里的中文,都是错的)。另一方面,
按照jdk的说明,str.getBytes("8859-1")的作用是将字符串str中的字符数组以ISO8859_1的格式编码为字节数组。
而new String(bytes, "gb2312")的作用是将字节数组bytes以GB2312的格式解码为字符数组。
当把三者联系起来以后,我们得到的关于new String(str.getBytes("8859-1"),"gb2312")语句的功能自然就是:
将字符串str中以Unicode字符数组(此时的字符数组并不是正确编码了中文字符的Unicode字符数组)保存的数据,以ISO8859_1的格式编码为字节数组,再将该字节数组以GB2312的格式解码为字符数组并保存到Unicode字符数组中(此时的字符数组是正确编码了中文字符的Unicode字符数组)。
如果是这样的话,相当于什么呢?相当于我们把一个文件用zip格式进行压缩,然后用rar格式来解压缩。其结果可想而知。
但是目前的实际情况是,new String(str.getBytes("8859-1"),"gb2312")工作得非常正常。
而理论上应当正常工作的下面这条语句,实际上无法正常运行:
new String((new String(str.getBytes("8859-1"), "8859-1")).getBytes("GB2312"))
(此语句的功能应当是:将字符串str中以Unicode字符数组(此时的字符数组并不是正确编码了中文字符的Unicode字符数组)保存的数据,以ISO8859_1的格式编码为字节数组,再将该字节数组以ISO8859_1格式解码为字符数组并保存到Unicode字符数组中(此时的字符数组是正确编码了中文字符的Unicode字符数组)。然后将这个正确编码了中文字符的Unicode字符数组中的数据以GB2312格式编码为字节数组并转换为一个GB2312格式编码的Unicode字符数组。
大家一看就知道,这就是我们用来对付jsp里中文乱码用的东西。
但是今天研究jdk中对String类的相关说明的时候,却发现读不懂这条语句。
大家都知道,Java中的String类中的数据都是用Unicode编码的字符数组来保存的(保存的数据的编码并不见得是正确的Unicode编码,就像我们的Jsp页面里的中文,都是错的)。另一方面,
按照jdk的说明,str.getBytes("8859-1")的作用是将字符串str中的字符数组以ISO8859_1的格式编码为字节数组。
而new String(bytes, "gb2312")的作用是将字节数组bytes以GB2312的格式解码为字符数组。
当把三者联系起来以后,我们得到的关于new String(str.getBytes("8859-1"),"gb2312")语句的功能自然就是:
将字符串str中以Unicode字符数组(此时的字符数组并不是正确编码了中文字符的Unicode字符数组)保存的数据,以ISO8859_1的格式编码为字节数组,再将该字节数组以GB2312的格式解码为字符数组并保存到Unicode字符数组中(此时的字符数组是正确编码了中文字符的Unicode字符数组)。
如果是这样的话,相当于什么呢?相当于我们把一个文件用zip格式进行压缩,然后用rar格式来解压缩。其结果可想而知。
但是目前的实际情况是,new String(str.getBytes("8859-1"),"gb2312")工作得非常正常。
而理论上应当正常工作的下面这条语句,实际上无法正常运行:
new String((new String(str.getBytes("8859-1"), "8859-1")).getBytes("GB2312"))
(此语句的功能应当是:将字符串str中以Unicode字符数组(此时的字符数组并不是正确编码了中文字符的Unicode字符数组)保存的数据,以ISO8859_1的格式编码为字节数组,再将该字节数组以ISO8859_1格式解码为字符数组并保存到Unicode字符数组中(此时的字符数组是正确编码了中文字符的Unicode字符数组)。然后将这个正确编码了中文字符的Unicode字符数组中的数据以GB2312格式编码为字节数组并转换为一个GB2312格式编码的Unicode字符数组。
相关文章推荐
- 关于new String(str.getBytes("ISO-8859-1"),"GBK")
- new String(str.getBytes("ISO-8859-1"),"GBK")是怎么样一种机制
- new String(str.getBytes("iso8859-1"), "UTF-8");
- values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8")中文乱码
- 在JSP中,使用get提交方式出现乱码时,为什么要使用new String(s.getBytes("iso-8859-1"),"utf-8");?
- new String(str.getBytes("iso8859-1"), "UTF-8");
- new String(value.getBytes("iso8859-1"),"UTF-8");
- page = new String(request.getQueryString().getBytes("ISO-8859-1"),"GBK");解决前台传后台乱码问题
- 使用 getBytes("iso-8859-1"),"gb2312" 方法仍出现乱码的解决方法
- new String(request.getParameter("newdefrayItem").getBytes("iso-8859-1"),"GBK")
- jsp页面中的汉字问题和表单提交汉字问题(***.getBytes("ISO-8859-1")行报错)
- 用MyEciplse时 some character can not mapped using "iso-8859-1" character encoding 解决
- 动态组装sql语句时使用str = where = "1=1"; 然后再进行追加对性能的影响
- 用myeclipse修改文件是出现“some characters cannot be mapped using "iso-8859-1"character encoding
- new String(getBytes(ISO-8859-1),GBK)解决中文乱码问题分析
- String[] a = new String[]{"1","2"},我如果想增加一个"3"到a中,如何增加?
- myEclipse保存jsp文件时报错:some characters cannot be mapped using "ISO-8859-1" character encoding
- 保存js文件时提示:"save could not to completed ISO-8859-1"
- Eclipse:some characters cannot be mapped using "ISO-8859-1" charater encoding
- 分享 返回分享首页» 分享 new String(getBytes(ISO-8859-1),GBK)解决中文乱码问题分析