解决中文乱码问题(转载)

Web项目 Jsp+Tomcat+Mysql乱码解决终极篇

写在之前:

   编码出现错误了在web开发的情况下是常常出现的问题。特别是接触了Jsp以来,所学的一切东西,TomcatMysql每样东西都产生了乱码。经过了几个web项目的开发,我总结出来了,一套系统的解决方案,仅供大家参考学习。

 

如果你已经是一位高手,或者对乱码有了深入的了解,就请放过本文吧,小弟设计web不久,所写的文章必定会有不足,指出就好,小弟脆弱的心灵经不起如潮涌般的狂踩。谢谢。

----------------------------------------------------------------------------------------

 

乱码由来:

据江湖盛行的传说,文字的编码分为很多的种类,unicodeUtf-8GBKGB2312等等编码。各个国家,各个地方的使用文字不同一,所以编码不一样。当然不一样编码,他们所编码的格式也就不一样。当使用一种编码格式去对文字编码,再用另一种格式对文字进行解码,所得的结果就变成了乱码。

--------------------------------------------------------------------------------------------

 

 

有人传言说,在JspTomcatMysql上统一编码就可以解决问题了。

此话是没有错的,但是能真正的的统一编码又有几个。

--------------------------------------------------------------------------------------------

 

 

乱码出现不用慌:

   三个问题问自己

①写了过滤器没有?

Jsp头部的编码与MySQL里的编码一样吗?

JspHtml等文件的存储格式有没有改动(默认是unicode,一般不会改)?

 

以上三个问题一般有过web学习的同学都会注意了。如果没有做,那就先完成以上步骤再向下看。

 

但是,以上都做了还出现乱码怎么办?  这个就是本文的重点了。

-----------------------------------------------------------------------------

 

 

以下方法我称为(定位法)

定位法——主要是看编码出错时有哪里引起的,哪里出错就在哪里修改。

 

需要在以下几个地方打印或查看

①网页显示页面

②处理动作的action

③数据库操作的SQL语句

④数据库中的内容

 

以下我们统一用一个UTF-8编码作为例子

1、如果一个提交信息页面,输入中文,然后在②处理动作的action中所打印的就出现乱码了。

获取表单提交的数据时的中文乱码问题

原因:由于TomactJ2EE实现对表单提交,即以post方式提交的参数采用默认的ISO-8859-1来处理,所以中文就会出现乱码

解决:检查filter设置是否错误,或者没有在xml中配置生效。

②页面之间传中文参数问题

在页面之间传中文参数,需要在tomact的安装目录的/conf/server.xml文件中找到Connector,加上URIEncoding="utf-8",如下

 

Xml代码 复制代码  收藏代码
  1. <Connector  
  2.   
  3. port="8080"               maxHttpHeaderSize="8192"  
  4.   
  5.                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
  6.   
  7.                enableLookups="false" redirectPort="8443" acceptCount="100"  
  8.   
  9.                connectionTimeout="20000" disableUploadTimeout="true"  URIEncoding="utf-8"/>  
  10.   
  11.     
  12.   
  13.    
<Connector

port="8080"               maxHttpHeaderSize="8192"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" redirectPort="8443" acceptCount="100"

               connectionTimeout="20000" disableUploadTimeout="true"  URIEncoding="utf-8"/>

 

 

  

 

 

2、如果一个页面提交信息,①网页显示页面②处理动作的action显示和打印都的都是正常的,而③数原因:数据库安装的时候设计的默认连接不是UTF-8

据库操作的SQL语句中打印出现乱码。如:

Java代码 复制代码  收藏代码
  1. insert into t_userinfo(user_num,user_password,user_type,user_name,user_comments) values ('20090840122','123456',0,'???','???')  
insert into t_userinfo(user_num,user_password,user_type,user_name,user_comments) values ('20090840122','123456',0,'???','???')

Java代码 复制代码  收藏代码
  1.   
 

解决:连接数据库的时候的语句,加上一句?useUnicode=true&characterEncoding=UTF-8"

test数据库连接为:

   "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";

 

 

 

 

 

3、如果一个页面提交信息,之前的都没有出现乱码,却在④数据库中的内容显示的为乱码,或者,直接报错,无法直接添加信息。

如:



 

 

只要出现中文的地方都变为 了  ???

原因:数据库表的编码格式,数据库字段的编码格式,与web项目的编码格式不统一。

即如图所示地方没设置好:


 


 

 

 

解决:修改一样即可。

 

 

 

 

 

 

4、一个读取显示页面,如果④数据库中的内容显示是正常的,但是①网页显示页面②处理动作的action,打印显示却是乱码。

原因:信息存储不存在乱码,乱码处于传输和显示上。

解决:检查filter设置的正确与否,检查JSP页面的默认编码是否与数据库统一。

 

 

 

 

 

 

5、一个读取显示页面,之前的都没有错,只有①网页显示页面是乱码。

原因:信息存储不存在乱码,乱码处于显示上。

解决:检查JSP页面的默认编码是否与数据库统一。

检查,

   Jsp页面头部加上:<%@ page contentType="text/html;charset=UTF-8" %>

   head部分加上:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

这两句话是否存在,存在是否错误。

--------------------------------------------------------------------------------------------

 

 

 

小结:

以上这些步骤能很好的应对我们WEB项目上常出现的各种乱码问题,“定位法”是本人所想,个人感觉,在查找编码错误的时候,具有“快”、“狠”、“准”的效果,或许有少许不合理,或许能对大家多少有点帮助。书写本文,时间多少有点匆忙如有错误,就请指出,相互学习,相互进步,谢谢。

 

<!--EndFragment-->

 

原文章:http://stchou.iteye.com/blog/1060818

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值