JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器
2012-12-14 16:03
411 查看
一、乱码原因
①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。
②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)
二、解决办法
方法一 每次传输都手动设置编码(GET方式传输数据)
传输方
String name = URLEncoder.encode("徐越","UTF-8");
String path = "http://localhost:8008/xyWeb/xyServlet?name=" + name;
接收方
String name = new String(request.getParameter("name").getBytes("ISO8859-1","UTF-8"));
若传输方默认采用UTF-8编码就没有必要每次写,但接收方每次都写太烦,可考虑过滤器。
方法二(过滤器)
①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。
②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)
二、解决办法
方法一 每次传输都手动设置编码(GET方式传输数据)
传输方
String name = URLEncoder.encode("徐越","UTF-8");
String path = "http://localhost:8008/xyWeb/xyServlet?name=" + name;
接收方
String name = new String(request.getParameter("name").getBytes("ISO8859-1","UTF-8"));
若传输方默认采用UTF-8编码就没有必要每次写,但接收方每次都写太烦,可考虑过滤器。
方法二(过滤器)
/** * 编码过滤器 * * @author 徐越 * */ public class EncodingFilter implements Filter { private String encoding; public void init(FilterConfig fConfig) throws ServletException { encoding = fConfig.getInitParameter("encoding"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception { HttpServletRequest httprequest = (HttpServletRequest) request; if ("GET".equals(httprequest.getMethod())) { // 将httpRequest进行包装 EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(httprequest, encoding); chain.doFilter(wrapper, response); } else { request.setCharacterEncoding(encoding); response.setContentType("text/html;charset=" + encoding); chain.doFilter(request, response); } } public void destroy() { } } /** * httpRequest进行包装类 * * @author 徐越 * */ public class EncodingHttpServletRequest extends HttpServletRequestWrapper { private HttpServletRequest request; private String encoding; public EncodingHttpServletRequest(HttpServletRequest request) { super(request); this.request = request; } public EncodingHttpServletRequest(HttpServletRequest request,String encoding) { super(request); this.request = request; this.encoding = encoding; } @Override public String getParameter(String name) { String value = request.getParameter(name); if (null != value) { try { // tomcat默认以ISO8859-1处理GET传来的参数。把tomcat上的值用ISO8859-1获取字节流,再转换成UTF-8字符串 value = new String(value.getBytes("ISO8859-1"), encoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return value; } }
<filter> <display-name>EncodingFilter</display-name> <filter-name>EncodingFilter</filter-name> <filter-class>cn.xy.filter.EncodingFilter</filter-class> <init-param> <description></description> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
相关文章推荐
- JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器
- Servlet处理get请求时中文乱码问题
- servlet处理get请求时的中文乱码问题
- 对实际项目中的get请求中文乱码以及post请求中文乱码的解决方案
- servlet处理get请求输出中文乱码
- Servlet处理get请求时的中文乱码问题
- Servlet处理get请求中文乱码问题
- javaWed项目中用过滤器实现转码功能,敏感词汇过滤更能,处理Get和Post接收数据中的中文乱码问题以及敏感词汇的处理
- 解决Servlet中处理GET请求乱码问题
- GET请求的中文乱码问题及处理意义
- JavaWeb之不同Tomcat版本对get、post请求,中文乱码问题
- request请求post、get方式中文乱码处理
- GET请求的中文乱码问题及处理意义
- HttpClient get和post请求的示例代码以及防乱码处理
- web项目中get方式提交中文乱码的处理
- 解决Get和Post请求中中文乱码问题 (2013-01-26 23:59:39)转载▼ 标签: javaee it 分类: JavaEE 对于Post请求,只需在Servlet或者jsp中写入如下
- Servlet中文乱码原因 解决 Get 和 Post 和客户端
- 【Servlet】CharacterEncodingFilter解决JavaWeb项目POST提交造成的中文乱码
- get请求时候参数中含有“中文”字段出现乱码问题的原因和解决方法
- springmvc 处理http get/post请求中文乱码的问题