使⽤encode()、decode()解决中⽂乱码问题
decode的作⽤是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表⽰将gb2312编码的字符串转换成unicode 编码。
encode的作⽤是将unicode编码转换成其他编码的字符串,如de('gb2312'),表⽰将unicode编码的字符串转换成gb2312编码。
因为在jsp中对中⽂进⾏了编码的时候⽤的是UTF-8的编码⽅式,⽽在servlet中调⽤Parameter();⽅法的时候使⽤服务器指定的编码格式⾃动解码⼀次,所以前台编码⼀次后台解码⼀次⽽解码和编码的⽅式不⽤所以造成了乱码的出现,
这就类似于以下代码:
String name=de("测试", "UTF-8");
System.out.println(name);
System.out.println(java.URLDecoder.decode(name, "ISO-8859-1"));
编码后的是%E6%B5%8B%E8%AF%95。。
⽽⽤ISO-8859-1解码后的是è?。。
但是如果调⽤的是
System.out.println(java.URLDecoder.decode(name, "UTF-8"));
则结果是打印“测试”。
这就印证了 之前为什么我在servlet中调⽤java.URLDecoder.Parameter("name"), "UTF-8")⽅法和调⽤java.URLDecoder.QueryString(), "UTF-8")所得到的结果是不⼀样的,就是由于在Parameter("name")之前会⾃动做⼀次解码的⼯作,⽽且是默认的ISO-8859-1。
所以,在使⽤java.URLEncoder.decode()和java.URLDecoder.decode(),的时候需要在前端页⾯中使⽤两次java.URLDecoder.decode()⽅法。
使⽤两次编码的过程相当于如下代码:
String name=de("测试", "UTF-8");
System.out.println(name);
name=de(name,"UTF-8");
System.out.println(name);
name=java.URLDecoder.decode(name, "UTF-8");
System.out.println(name);
System.out.println(java.URLDecoder.decode(name, "UTF-8"));
输出为:
%E6%B5%8B%E8%AF%95
url编码和utf8区别%25E6%25B5%258B%25E8%25AF%2595
%E6%B5%8B%E8%AF%95
测试
第⼀次编码后将汉字编码为%和字母数字的格式,⽽第⼆次编码的时候是对%字母数字进⾏编码,虽
然解码的时候使⽤的是ISO-8859-1,但是对于%和字母数字⽽⾔⽤ISO-8859-1和UTF-8解码出来的是⼀样的,此时就回到了汉字被编码过⼀次的
字符串了,当再次进⾏解码的时候使⽤UTF-8就回将它转会汉字。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论