一、乱码原因
①传输方和接收方采用的编码不一致。传输方对参数采用的是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项目中出现乱码问题的解决方案。并介绍如何统一开发环境、应用服务器、本机浏览器的编码格式。
关于处理Javaweb中中文乱码的问题文.pdf
javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) javaWEB项目:新生管理系统(Servlet+JSP+JavaBean) ...
javaweb里用来处理页面中文的,解决中文乱码问题
javaweb全站请求编码过滤器视频,手把手教你学会请求编码过滤器
用MyEclipse 8.5 开发的JavaWeb页面编码过滤器.支持所有web页面,包括servlet
关于处理Javaweb中中文乱码的问题[收集].pdf
filter是javaWeb中一个十分重要的知识点,可以拦截webApp的所有请求。 使用场景: 1、可以利用filter做到网站自登录。...2、可以利用filter全局修改参数编码,从而解决中文乱码问题(十分重要)。
JavaWeb笔记08Servlet中get和post区别.pdf
讲述javaweb开发中的jsp乱码问题 get、post的区别 http协议的图解
利用过滤器解决JavaWeb(JSP)的乱码问题
基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍管理系统基于 Servlet+jsp+mysql 开发 javaWeb 学生宿舍...
中文乱码javaWEB开发各种解决中文乱码问题
JavaWeb Servlet中Filter过滤器的详解 1.简述 Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制、过滤敏感词汇、压缩响应信息)。Filter能够对Servlet容器的请求和响应进行检查...
Javaweb中过滤器的三个小案例:案例1:分IP统计网站的访问次数;案例2 粗粒度权限控制(根据用户名登陆);案例4、解决全站字符乱码(POST和GET中文乱码问题)
javaweb项目是由jsp+servlet+mysql技术所写的,项目里面有创建表的sql文件,功能包括了完整的对用户的添加,修改,删除,查询整表,等技术,很适合基础学习,项目目录层次清晰,可在基础上继续添加新的功能,希望...
character-encoding-filter 是 Java Web 乱码过滤器。 web.xml <filter-name>character-encoding-filter <filter-class>com.github.zhanhb.filter.CharacterEncodingFilter</filter-class> ...
中文乱码问题是JavaWeb开发中最常见的问题之一,解决的方法也有很多种,其中,过滤器是最常用的方法之一。提供了过滤器的源码和详细配置。
使用setContentType(String type)方法设置编码,或使用setCharacterEncoding(String charset)和setHeader(String name,String value)设置编码和解码方式来解决中文输出乱码。 参考代码 编写ChineseServlet.java,...
利用过滤器解决JavaWeb(JSP)乱码问题