过滤器处理乱码问题,在doFilter中添加request.setCharacterEncoding(charset)
通过在过滤器中修改字符编码的方式
请求中文参数乱码的修改方式:
修改tomcat字符集;
添加编码过滤器;
代码中通过getBytes()获取字节码强制转换。
编码转换案例
后端接受前端输入的参数乱码解决方式
【一】修改Tomcat字符集
【二】过滤器修改字符集(通常放在web.xml中的参数中)
【三】通过强制类型转换
拓展:pageEncoding和contentType的区别:https://www.cnblogs.com/kevin-yuan/archive/2011/12/31/2308479.html。
@JavaWeb----过滤器编码转换
在web.xml中配置
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
<!-- 指定部分页面,在代码中实现对这些页面放行 -->
<init-param>
<param-name>noLoginPaths</param-name>
<param-value>index.jsp;login.jsp;LoginServlet;fail.jsp</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
在Filter中
private FilterConfig config = null;
public void init(FilterConfig arg0) throws ServletException {
config = arg0; // 将实例化时的init-param存入config
}
用Filter处理编码问题:
在过滤器中添加:
request.setCharacterEncoding("utf-8");
或者:在web.xml中配置初始化参数
在web.xml中配置
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
<!-- 指定部分页面,在代码中实现对这些页面放行 -->
<init-param>
<param-name>noLoginPaths</param-name>
<param-value>index.jsp;login.jsp;LoginServlet;fail.jsp</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
在Filter中
private FilterConfig config = null;
public void init(FilterConfig arg0) throws ServletException {
config = arg0; // 将实例化时的init-param存入config
}
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
String charset = config.getInitParameter("charset"); // 从config中获得字符集
if(charset==null){
charset = "UTF-8";
}
request.setCharacterEncoding(charset); // 设定字符集为UTF-8
}
编码转换 字符集转换防止乱码
使用: request.setCharacterEncoding("config.getInitParameter("XX")")
XX参数内容“UTF-8”
@JavaWeb----过滤器编码转换
在web.xml中配置
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
<!-- 指定部分页面,在代码中实现对这些页面放行 -->
<init-param>
<param-name>noLoginPaths</param-name>
<param-value>index.jsp;login.jsp;LoginServlet;fail.jsp</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
在Filter中
private FilterConfig config = null;
public void init(FilterConfig arg0) throws ServletException {
config = arg0; // 将实例化时的init-param存入config
}
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
String charset = config.getInitParameter("charset"); // 从config中获得字符集
if(charset==null){
charset = "UTF-8";
}
request.setCharacterEncoding(charset); // 设定字符集为UTF-8
}
@web.xml <init-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </init-param> @LoginFilter.java String charset=config.getInitParameter("charset"); if(charset==null){//如果不设置,默认UTF-8 charset="UTF-8"; } request.setCharacterEncoding(charset);