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);
%>
2
◆
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
动作指令。
3
◆
tomcat+struct
中文乱码解决
1
、在
conf/
server.xml
文件中设置
URIEncoding
为
gb2312
或
gbk
2
、实现一个过滤器
Filter
来设置
gbk
的字符编码格式
webapps/servlet-examples
目录有一个完整的例子,可参考
web.xml
和
SetCharacterEncodingFilter
进行设
置,方法如下:
(
1
)把
webapps\
servlets-examples
\WEB-INF\classes\filters\SetCharacterEncodingFilter.class
文件
拷到
自己
web
应用的
\WEB-INF\classes\filters
目录下,如果没有
filters
目录,就创建一个。
(
2
)打开
conf\
web.xml
,加入如下几行:
……………………
.
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
※说明:
(
1
)
其它
web
应用的
\WEB-INF\classes\filters
目录中也应该放置
SetCharacterEncodingFilter.class
文件,
否则没有放置
SetCharacterEncodingFilter.class
的
web
应用将无法使用。
(
2
)这种解决方法和其它解决方法不要同时使用,否则有时会出现程序不能正常运行。
(
3
)将
server.xml
和
web.xml
新增的内容去掉即可关闭过虑功能。