解决JSP+Tomcat+MySQL中文乱码问题

  • A+
所属分类:电子商务

中文问题总结
1、页面html静态部分乱码,比如表单的名字
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
加在<html><head>之间
2、页面JSP动态部分乱码
<%@ page contentType="text/html; charset=gb2312" language="java">
3、URL参数接收中文乱码
接收servlet中加入request.setCharacterEncoding("gb2312");需要在读请求参数和读getReader()的input之前调用。
4、MySql数据库操作乱码
连接数据库的URL中添加useUnicode=true&characterEncoding=GB2312:
jdbc:mysql://host/databaseName?useUnicode=true&characterEncoding=GB2312"
建表时指定编码
页面和servlet中的遵守1、2条,提交数据库处理之前遵守3条。
5、servlet转发时乱码
在servlet中显示乱码或者转发后显示乱码需要在操作之前调用:
response.setContentType("text/html; charset=GBK");
同时在JSP页面中遵守1、2两条。

如:

//先搞清除是在action里乱的还是在mysql insert的时候乱的。
//action里 post方式提交过去 request.setCharacterEncoding("GBK");然后在接受参数既可。
//mysql的话 你需要 给数据库的连接串 就是那个url后面加上
//useUnicode=true&characterEncoding="UTF-8";
request.setCharacterEncoding("GBK");//此设置会令用户名username使用中文合法

String target;
String message;

//获取用户填写的注册信息
String username = request.getParameter("username");
String pwd = request.getParameter("password");
String realname = request.getParameter("realname");
String age = request.getParameter("age");
String comment = request.getParameter("comment");
String email = request.getParameter("email");
String genderS = request.getParameter("gender");
boolean gender = false;
if("male".equals(genderS)){
gender = true;
}
String[] interests = request.getParameterValues("interests");

6、转码方法,对请求参数或写入数据库的数据进行中文转码,在需要时调用。

public static String toChinese(String conStr)
{
try{
if(conStr==null)
return null;
else
{
conStr = new String(conStr.getBytes("ISO8859_1"), "GBK");
return conStr;
}
}catch(Exception e){
return null;
}
}
7、更改tomcat的server.xml使在get方法时URL中的中文也用gbk编码。
如果你发现在上述的方法在form中submit方法为get时,通过URL传给服务器的中文还是不能正常显示,而post方法却可以通过以上介绍的方法 来进行编码转换,这种情况可能在tomcat4中并不会有,而在tomcat5中却有,这是因为tomcat4和tomcat5对 QueryString(get方法)和post方法的编码处理不一样所致,tomcat4中post和QueryString是一样的编码方法,如果不 显式指定则默认为iso-8859-1,而tomcat5中却是post默认是iso-8859-1,QueryString默认为%??的形式而不是 iso-8859-1。
故需要显示制定QueryString的编码方式,在TOMCAT_HOME/conf/server.xml中找到<Connector />区块,设定这两个参数之一。
URIEncoding:指定QueryString的编码
useBodyEncodingForURI:true时指定URIEncoding编码与post一样,false则相反。
原文出处在tomcat的文档中:http://localhost/tomcat-docs/config/printer/http.html但是这个文档的说明是有问题的,他说URIEncoding在默认是用iso-8859-1编码的,其实并非如此。有牛人研究tomcat源码得出的结论。
示例:
<Connector
debug="0"
acceptCount="100"
connectionTimeout="20000"
disableUploadTimeout="true"
port="80"redirectPort="8443"
enableLookups="false"
minSpareThreads="25"
maxSpareThreads="75"
maxThreads="150"
maxPostSize="0"
URIEncoding="ISO-8859-1">
</Connector>

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

    • avatar 小尾狐 1

      嗯嗯,我也遇到过这个问题,正好要找这个呢