使用Tomcat5作为Web Container,遇到的各类中文乱码问题及解决办法。
1. Servlet里输出的「静态中文内容」显示乱码
现 象:在Servlet里通过java.io.PrintWriter对象输出的中文内容为乱码。
原 因:Tomcat默认输出的字符的编码为“ISO-8859-1”。
解决方案:response.setContentType("text/html;charset=GBK");
2. JSP页面里的「静态中文内容」显示乱码
现 象:JSP页面里输出的静态中文内容为乱码。
原 因:Tomcat默认输出的字符的编码为“ISO-8859-1”。
解决方案:<%@ page contentType = "text/html;charset=GBK" pageEncoding="GBK"%>
3. 表单提交,「POST方法提交的中文内容」显示乱码
现 象:使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 使用过滤器过滤请求。request.setCharacterEncoding("GBK");
2. new String(request.getParameter(String).getBytes("ISO-8859-1"),"GBK");
4. 表单提交,「GET方法提交的中文内容」显示乱码
现 象:使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 修改“{$TOMCAT_HOME}/conf/server.xml”中的<Connector port="8080" ...,增加URIEncoding="GBK"。
2. new String(request.getParameter(String).getBytes("ISO-8859-1"),"GBK");
5. 静态URL链接提交,「提交的中文内容」显示乱码
现 象:<a href="url?pavam=中文"...,使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 修改“{$TOMCAT_HOME}/conf/server.xml”中的<Connector port="8080" ...,增加URIEncoding="GBK"。
2. new String(request.getParameter(String).getBytes("ISO-8859-1"),"GBK");
6. <jsp:param>标签,「传递的中文参数值」显示乱码
现 象:<jsp:include page="footer.jsp"><jsp:param name="param" value="中文"/></jsp:include>,
在footer.jsp里使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 使用过滤器过滤请求。request.setCharacterEncoding("GBK");
2. 在设置参数之前,调用request.setCharacterEncoding("GBK");即request.setCharacter...;<jsp:include...;
3. 在设置参数之前,对参数进行encode,获得值后再decode。java.net.URLEncoder.encode("中文","GBK");
java.net.URLDecoder.decode(request.getParameter(String),"GBK");
1. Servlet里输出的「静态中文内容」显示乱码
现 象:在Servlet里通过java.io.PrintWriter对象输出的中文内容为乱码。
原 因:Tomcat默认输出的字符的编码为“ISO-8859-1”。
解决方案:response.setContentType("text/html;charset=GBK");
2. JSP页面里的「静态中文内容」显示乱码
现 象:JSP页面里输出的静态中文内容为乱码。
原 因:Tomcat默认输出的字符的编码为“ISO-8859-1”。
解决方案:<%@ page contentType = "text/html;charset=GBK" pageEncoding="GBK"%>
3. 表单提交,「POST方法提交的中文内容」显示乱码
现 象:使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 使用过滤器过滤请求。request.setCharacterEncoding("GBK");
2. new String(request.getParameter(String).getBytes("ISO-8859-1"),"GBK");
4. 表单提交,「GET方法提交的中文内容」显示乱码
现 象:使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 修改“{$TOMCAT_HOME}/conf/server.xml”中的<Connector port="8080" ...,增加URIEncoding="GBK"。
2. new String(request.getParameter(String).getBytes("ISO-8859-1"),"GBK");
5. 静态URL链接提交,「提交的中文内容」显示乱码
现 象:<a href="url?pavam=中文"...,使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 修改“{$TOMCAT_HOME}/conf/server.xml”中的<Connector port="8080" ...,增加URIEncoding="GBK"。
2. new String(request.getParameter(String).getBytes("ISO-8859-1"),"GBK");
6. <jsp:param>标签,「传递的中文参数值」显示乱码
现 象:<jsp:include page="footer.jsp"><jsp:param name="param" value="中文"/></jsp:include>,
在footer.jsp里使用request.getParameter(String)得到的中文参数值是乱码。
原 因:Tomcat默认采用“ISO-8859-1”编码处理参数。
解决方案:1. 使用过滤器过滤请求。request.setCharacterEncoding("GBK");
2. 在设置参数之前,调用request.setCharacterEncoding("GBK");即request.setCharacter...;<jsp:include...;
3. 在设置参数之前,对参数进行encode,获得值后再decode。java.net.URLEncoder.encode("中文","GBK");
java.net.URLDecoder.decode(request.getParameter(String),"GBK");