Tomcat 中文乱码解决方法
一、通过contentType、pageEncoding或response.setCharacterEncoding设置网页编码(如utf-8、gb2312、gbk或其它编码)。比如(以gbk为例):
<%@ page contentType="text/html;charset=gbk" %>
或: <%@ page pageEncoding="gbk" %>
或: <% response.setCharacterEncoding ("gbk"); %>
二、然后根据以下情况进行具体设置(以下各情况的设置互不关联):
◆ POST数据的接收
只需在接收数据的jsp文件中设置request的字符编码格式为当前POST数据的网页编码,例如:
<% request.setCharacterEncoding("gbk"); %>
◆ GET数据和URL数据(如超链接)的接收
只需在Tomcat配置文件server.xml的Connector标签中设置useBodyEncodingForURI为true,或者设置URIEncoding为提交数据的网页编码。例如:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
useBodyEncodingForURI="true" 或URIEncoding="gbk" />
如果采用useBodyEncodingForURI="true",则需要在接收数据的jsp文件中设置request的字符编码格式为当前网页编码,例如(设当前网页编码为gbk):
<% request.setCharacterEncoding("gbk"); %>
※URIEncoding参数会影响到所有应用,故推荐设置useBodyEncodingForURI为true的方式接收数据。
◆ response.sendRedirect中文乱码解决
1、如果涉及POST数据、GET数据或URL数据,需保证能正常接收;
2、然后采用以下某种方法对发送数据进行编码变换:
方法1:将发送数据的编码转换为ISO-8859-1
示例代码:
<%
String aa="s中国ff";
aa=new String(aa.getBytes("GBK"),"ISO-8859-1"); //用于gbk的网页编码
aa=new String(aa.getBytes("utf-8"),"ISO-8859-1"); //用于utf-8的网页编码
response.sendRedirect("b2.jsp?a="+aa);
%>
方法2:将发送的数据用java.net包中的URLEncoder类的encode方法进行URL编码
示例代码:
<%
String aa="s中国ff";
aa=java.net.URLEncoder.encode(aa); //用于gbk的网页编码
aa=java.net.URLEncoder.encode(aa,"utf-8"); //用于utf-8的网页编码
response.sendRedirect("b2.jsp?a="+aa);
%>
◆ jsp动作指令传递中文乱码解决(如jsp:forward、jsp:include)
只需在原页面中设置request的字符编码格式为当前网页编码即可,示例代码如下:
·原页面param.jsp代码(设网页编码为gb2312):
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<% request.setCharacterEncoding("gbk"); %>
<jsp:include page="paramget.jsp?aa=my课件2kj">
<jsp:param name="bb" value="sf中文地方ghaa"/>
</jsp:include>
·被包含paramget.jsp代码:
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%
String aa=request.getParameter("aa");
String bb=request.getParameter("bb");
out.print(aa);
out.print("<br>");
out.print(bb);
%>
※说明:
(1)在paramget.jsp中设置request为网页编码格式无用;
(2)示例中可以将include换成forward等其它JSP动作指令。