1.前台页面
jsp,html页面头部设置字符编码为utf-8
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
2.控制器
(1)如果是servlet设置页面请求和回应的编码:
request.setCharacterEncoding("utf-8"); [一般用于post请求方式]
response.setCharacterEncoding("utf-8");
(2)如果是struts2
struts.xml前面加上这么一句:
<constant name="struts.i18n.encoding" value="utf-8" />
(3)如果使用了spring框架
web.xml配置
<!-- 编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.EncodingFilter</filter-class>
<init-param>
<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>
创建过滤器 EncodingFilter
public class EncodeFilter implements Filter {
protected String encoding = null;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) throws ServletException {
this.encoding = config.getInitParameter("encoding");
}
}
3.数据库
第一保证数据库的db和table的编码格式是utf-8
第二jdbc:mysql://localhost:3306/android_stat?useUnicode=true&characterEncoding=utf-8
在连接数据库的时候加上 ?useUnicode=true&characterEncoding=utf-8
4.字符流
String string = request.getParametes('name');
//把得到的值转为原始编码,再转为UTF-8
string=new String(string.getBytes("iso8859-1"),"UTF-8"); [一般用于get请求]
5.tomcat原因
在server.xml加上 <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
6.JS或URL
前台:var name = encodeURI($("#name").val(),"utf-8");
后台:String name=URLDecoder.decode(request.getParameter("name"),"utf-8");