JSP/JavaBean等接收参数出现乱码的解决方法

今天上课,有一个同学编写的JavaBean,在接收中文参数的时候,出现了乱码现象。在Java编程过程中,经常会出现这种情况。

首先明确一下什么是编码与解码的概念。在Java的字符串操作的概念里,如String类,按照一定的字符集将字符转换成一个字节数组称为编码,反过来,将一个字节数组转换成字符串称为解码。

为什么这么做?是因为传输的时候都是使用字节传送的,计算机是不认识什么字符的,字符是某个数字(或者符号)在某个字符集里映射后才能显示出来或者做其他的处理。

现在给出三种解决办法:

第1种解决方法

话说回来,解决这种问题比较常用的做法是使用request.setCharacterEncoding()方法,将之设置成与提交数据的页面提交的数据一样的编码,怎么确定呢,在提交数据的jsp页面,找到<meta http-equiv="Content-Type" content="text/html; charset=GBK">,看到charset为GBK就设置成GBK就可以了。

第2种解决方法
第二种方法是不使用request.setCharacterEncoding(),而是写一个编码转换函数,将接收过来的乱码转换成需要的代码。Tomcat在对post数据传输的时候,认为你使用的是ISO-8859-1编码,事实上本来数据可能是gbk编码,现在接收过来使用ISO-8859-1进行解码当然会出问题,解决方法是,既然自动的是按照ISO-8859-1解码,我们再把这个过程还原回去,就是先用ISO-8859-1编码,得到原来的用GBK编码的字节数组(注意这里),然后再显式调用GBK字符集进行解码。本文原创,转载请注明来自historycreator.com

具体如下:

/*得到字符串historycreator的原来使用gbk编码的字节数组(为什么这样能得到?自己考虑下)*/
byte[] hc = historycreator.getBytes("iso-8859-1");

/*重新使用gbk进行解码,得到正确的字符串信息*/
historycreator = new String(hc,"gbk");

 

如果在一个JavaBean里,就可以直接在setter方法里进行转换。

如:
public void setUsername(String username) {
       
        try {
            byte[] b = username.getBytes("iso-8859-1");
            username = new String(b,"gbk");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
       
        this.username = username;
    }

这样就可以正确显示了。

第3种解决方法
本质上仍然使用第2种的原理,使用过滤器(filter),在过滤器里对传过来的参数进行修正即可,具体方法网上有,请在本站首页搜索一下 "过滤器 乱码 " 或者 "java 乱码".

本文原创,转载请注明来自historycreator.com


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Javabean 乱码问题解决
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.