打开浏览器获取网页数据,通过jsp中指定的编码格式解析网页,如果未设置,就使用默认编码格式。一般我们使用UTF-8的格式,在jsp页面添加下列代码
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" %>
通过设置contentType属性中charset设置指定编码,jsp在解析的时候或自动将该属性值解析到如下标签中
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
所以说加了page命令后,这段meta标签其实根本没必要添加就会自动出现。
针对html页面乱码则添加上面的meta标签即可解决乱码问题。注意,meta标签需要添加到head标签里面。
(1)在前台数据提交到后台的过程中,首先进入tomcat中,现在在tomcat中进行编码处理,打开context.xml配置文件
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
tomcat控制uri的编码,uri是url后面的那部分,比如http://www.baidu.com/test/hello,的uri就是/test/hello。那么说明只能控制get请求,和部分post请求(比如ajax提交的post)。
(2)接下来数据请求进入springmvc拦截器,如果没有拦截器直接进入过滤器
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器是为了设置request的编码,forceEncoding是设置,是否同时设置response的编码,默认为false
(3)自定义filter类解决编码问题
package com.qiyuan.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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EncoidingFilter implements Filter {
private String encoding="";
@Override
public void destroy() {
// TODO Auto-generated method stub
}
//过滤方法 是否往下执行
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
//过滤通行证
chain.doFilter(request, response);
}
//根据web.xml文件的配置进行初始化
@Override
public void init(FilterConfig arg0) throws ServletException {
this.encoding = arg0.getInitParameter("Encoding");
}
}
在web.xml中添加配置
<!-- 配置编码过滤 -->
<filter>
<filter-name>EncoidingFilter</filter-name>
<filter-class>com.qiyuan.filter.EncoidingFilter</filter-class>
<init-param>
<param-name>Encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncoidingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(4)也可以使用代码单独解决一条request的编码问题
request.getParameter(
"bigQuestionTypeName"
)).getBytes(
"iso-8859-1"
),
"utf-8"
修改数据库的编码格式
原文:https://www.cnblogs.com/charleyyxc/p/14939409.html