中文问题总结
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两条。
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>
引用: http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=3&age=0&tpg=1&ppg=1
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两条。
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>
引用: http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=3&age=0&tpg=1&ppg=1