记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

乱码问题的解决

    上周做几个简单的数据查看的页面,使用的JSP(视图)+JavaBean(模型)+Servlet(业务处理),在本地的调试环境(JBuliderX+Resin)下出现乱码。通常我使用的编码方式都是为GB2312,因为页面中所有的中文都是乱码,所以通过简单的分析出问题的最有可能出问题的地方就是JSP视图,其次是业务处理部分业务处理部分,作为Bean模型,只是用来存储数据的,不可能出现问题。

    首先,那就从JSP视图开始检查:
        1.检查contentType="text/html;CharSet=gb2312";
        2.在JSP页面的最上面<%@的下面添加request.setCharacterEncoding("gb2312"),JSP页面接收数据的统一为GB2312编码格式;
        3.检查HTML中<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,看看浏览器的编码方式是不是GB2312的编码。

    这个几个问题都检查无误,再来一次看看,发现除了从数据库中取出来的数据有乱码,其他地方都正常。那接下来问题的可能性就有两个方面了,一是从数据库中取出来的时候就不是gb2312的编码格式,一是Servlet的传输数据的时候出的问题。

    接下来还是先从数据库的原因查起吧,数据源的配置如下(WebServer使用的是Resin):

<resource-ref>
  <res-ref-name>jdbc/smsproduct</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <init-param driver-name="com.mysql.jdbc.Driver"/>
  <init-param url="jdbc:mysql://211.99.209.235:3306/smsproduct"/>
  <init-param user="mrx"/>
  <init-param password="xicn123"/>
  <init-param max-connections="20"/>
  <init-param max-idle-time="30"/>
  <init-param useUnicode="true"/>
  <init-param characterEncoding="GBK"/>
  <init-param characterSetResults="GBK"/>
</resource-ref>

    编码方式为GBK,没有问题。现在看来只能是Servlet的问题了。JSP要执行的话首先就是要编译成Servlet的,那么上面检查JSP问题的方法,类比之下应该可以应用的Servlet上:
        1.response.setContentType(CONTENT_TYPE),CONTENT_TYPE是一个常量,默认是“text/html; charset=ISO-8859-1”,看来这里是有问题了,应该把“charset=ISO-8859-1”改为“charset=gb2312”;
        2.request.setCharacterEncoding("gb2312");在doGet或者doPost方法的最上面是否有这个设置。
    检查完这些,再来一次,哇,太棒了,一切搞定。

    回头再看上面的排查步骤,其实都是些平常经常用到的东西,出现乱码的原因就是因为一些细节上的不规范、不一致造成的,认真总结,其实乱码问题似乎也并不那么可怕,或许还是因为我遇到的乱码问题太简单而已,希望大家多多交流。

Tags: jsp/java

« 上一篇 | 下一篇 »

只显示10条记录相关文章

linux+Apache2.2.2+Tomcat5.5.17+JSP (浏览: 42979, 评论: 0)

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):