html中的编码
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">这里不设置成中文编码无法写中文。
jsp中的编码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
contentType="text/html; charset=UTF-8"是提供给浏览器的,pageEncoding="UTF-8"是服务器编译jsp时使用的,两者不一致可能会导致页面乱码,有时候可能不会乱码,最好保持一致。
servlet请求编码设置
请求编码设置分两种,一种是get请求,tomcat获取请求参数的默认编码是ISO8859-1,无法获取中文,会出现乱码问题,doGet方法用request.setCharacterEncoding("utf-8");设置编码不能解决,需要在server.xml的<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>添加URIEncoding="utf-8",这样可以解决url后传中文参数问题。或者用String userName = new
String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")在每个参数获取时设置编码。
另一种是post请求,在doPost方法中用request.setCharacterEncoding("utf-8");就能解决post方法的中文传参乱码问题。
servlet响应编码设置
响应编码get与post请求一样,用response.setContentType("text/html;charset=UTF-8");就可解决。
统一来解决post请求乱码的问题
创建一个Filter用来过滤所有请求,在Filter将request的编码设置为utf-8,然后在放行请求。
SpringMVCPOST编码设置
在web.xml文件中加上CharacterEncodingFilter
需要在放在DispatcherServlet配置后,否则可能会出错
<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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>