在写web程序的时候我经常遇到中文乱码问题,特别让人头疼,所以今天特地搜集了一些处理中文乱码的资料,作出如下总结,如有不当之处欢迎广大博友进行指正。
1.HTML中文编码转换
在JSP文件中的静态文字显示乱码,则需要在<head></head>之间增加中文设置代码,如下清单所示
<span style="font-size:14px;"><head>
<span style="white-space:pre"> </span><meta http-equiv="content-type" content="text/html;charset=utf-8">
</head></span>
charset指定UTF-8字符集,当然也可以指定其他支持中文的编码,如GBK,GB2312,但是整个Web应用一定要统一编码。
2JSP中文编码转换
方法1:在每个JSP文件开头增加如下代码:
<span style="font-size:14px;"><%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %></span>
<span style="font-size:14px;">request.setCharacterEncoding("utf-8");</span>
方法3:使用编码过滤器。创建过滤器类SetCharractorEncoding,源码如下:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncoding implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 设置字符编码
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
过滤器类还须在web.xml中进行配置,设定要过滤那些请求。过滤器在web.xml中的配置如下所示:
<span style="font-size:14px;"><filter>
<span style="white-space:pre"> </span><filter-name>setCharacterEncoding</filter-name>
<filter-class>control.sevlet.SetCharacterEncoding</filter-class>
</filter>
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></span>
方法1,方法2,方法3经常需要使用,但一般不是独立运用的,而是两两结合,可以根据不同情况组合使用。
方法4:URL传参导致乱码问题,可以修改tomcat根目录中的conf子目录下的sever.xml文件,在其中加入URLEncoding="utf-8"
<span style="font-size:14px;"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URLEncoding="utf-8" /> </span>
方法5:对于get请求可以通过先解码在编码的方式如下
<span style="font-size:14px;">String var = req.getParameter("username");
String username = new String(var.getBytes("iso-8859-1"),"utf-8");</span>
方法6:对于get请求还可以在tomcat根目录中的conf子目录下的sever.xml文件中加入useBodyEncodingForURI="true"如下:
<span style="font-size:14px;"><Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" /> </span>
方法7:如果是调用response.sendRedirect传递中文参数产生乱码(对于某些超链接同样适用),如:response.sendRedirect("a.jsp?p=中文参数");可以使用如下方法:
<span style="font-size:14px;"><%@page import="java.net.URLEncoder" %>
<%
String p = "中文参数";
p = URLEncoder.encode(p, "UTF-8");
response.sendRedirect("a.jsp?p=" +p);
%></span>
声明:以上便是关于jsp中文乱码的解决方法,方法全部来自互联网和书籍,在此做出总结,算是笔记吧,方便以后查阅。