在学习的过程中,实时总结觉得是非常重要的,即使是再简单的问题,当你积累的多了,不要总是犯一些简单的错误,实时总结,你会发现进步就一天天成长起来了。
中文乱码有几方面,页面展示,request和response过程中,Web服务器编码的问题。
1,如果编写中文的页面,首先将Tomcat的server.xml中的配置加上
<Service>
<Connector URIEncoding="UTF-8">
...
</Connector>
</Service>
2,GET方式的请求与接收过程
页面中参数“param=中文”的编码原本为GBK,当用GET方式发送参数的时候,参数值会被Web服务器从GBK转码为ISO-8859-1。
Servlet接收到的GET请求参数的编码当然为ISO-8859-1了,对于中文肯定显示不了,因此要将ISO-8859-1转换为GBK就可以正常显示中文了。
String param = request.getParameter("param");
String x = new String(param.getBytes("ISO-8859-1"),
"GBK");
System.out.println("GET方式获取的中文参数值:" + x);
3,POST方式请求与接收过程
页面中参数“param=中文”的编码原本为GBK,当点击页面中提交按钮后,参数会以GBK编码格式发送给Servlet,因此Servlet接收参数的时候必须将请求的编码明确设定为GBK,这样才能正确接收中文。
request.setCharacterEncoding("GBK");
String param = request.getParameter("param");
System.out.println("POST方式获取的中文参数值:" + param);
4,过滤器方式,设置request和response的CharacterEndoding("GBK),但是对于GET方式无法通过filter实现,必须读取的时候转编码
Java代码
- 在doPost()方法中使用过滤器(所有编码方式为过滤器中设置的编码方式),在doget()方法中使用iso-8859方法
- doGet及在页面中处理乱码的方法
- 1.EncodString.java 处理乱码的类
- package commons;
- import java.io.UnsupportedEncodingException;
- public class EncodString {
- public static String trans(String in) {
- try {
- in = new String(in.getBytes("ISO-8859-1"), "GBK");
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return in;
- }
- }
- 2.在页面或doGet()方法中进行转换
- String n=request.getParameter("name");
- String name=EncodString.trans(n);
- doPost()方法中处理乱码的方法
- 1.过滤器EncodeFilter.java
- package com.xuyue.exp.filter;
- 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 EncodeFilter implements Filter {
- private String encoding="";
- public void destroy() {
- // TODO Auto-generated method stub
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- // TODO Auto-generated method stub
- request.setCharacterEncoding(encoding);
- chain.doFilter(request, response);
- }
- public void init(FilterConfig config) throws ServletException {
- // TODO Auto-generated method stub
- encoding=config.getInitParameter("encoding");
- }
- }
- 2.在web.xml中配置过滤器
- <filter>
- <filter-name>encoding</filter-name>
- <filter-class>com.xuyue.exp.filter.EncodeFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>GBK</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- 3.项目中所有的编码方式改为GBK