在编程的时候会遇到各类中文乱码,这里进行统计以便之后查阅html
一、前端页面元素中文乱码前端
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
会出现下面乱码web
页面上的元素也就是html内的元素,是中文的会出现乱码,而从后台获取的中文不会出现乱码。spring
解决方法:页面上设置编码方式为UTF-8编程
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
二、URL传参、get方式传参出现中文乱码,以下数组
出现这种状况,要先肯定参数在前台页面上不是乱码的,能够alert()一下,看参数是否乱码tomcat
解决办法1:服务器
对于以get方式传输的数据,request默认使用ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致所以才会产生中文乱码的。app
解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,而后经过字节数组以指定的编码构建字符串,解决乱码问题。框架
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id= request.getParameter("id"); id=new String(name.getBytes("ISO8859-1"), "UTF-8") ; }
解决方法2:
修改tomcat服务器的编码方式,能够在server.xml里面设置
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
设置成红字部分,可是有时也是不可用的,由于即便这里设置的是UTF-8可是其余地方设置成其余编码方式会覆盖掉这个设置,仔细检查各个地方的编码。
好比Spring Boot 的application.properties配置文件里设置成server.tomcat.uri-encoding=GBK就会覆盖掉tomcat本身的设置,我这里是打个比方,由于SpringBoot是内置Tomcat服务器的。
解决办法3:中文参数进行编码处理
?id="+encodeURI(encodeURI("中文参数"));
后台:
String name = request.getParameter("name");
String str = URLDecoder.decode(name,"UTF-8");
三、POST方式出现中文乱码
缘由:由于服务器和客户端沟通的编码不一致形成的,所以解决的办法是:在客户端和服务器之间设置一个统一的编码,以后就按照此编码进行数据的传输和接收。
解决方法:因为客户端是以UTF-8字符编码将表单数据传输到服务器端的,所以服务器也须要设置以UTF-8字符编码进行接收
一、后台代码
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");//注意要在getParameter以前设置
String id= request.getParameter("id");
}
二、若是使用的是框架的话,能够统一设置字符过滤器,这里以 SpringMVC为例:
<filter> <description>字符集过滤器</description> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</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>
三、SpringBoot 这样设置: 建立一个类继承WebMvcConfigurerAdapter
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { @Bean public HttpMessageConverter<String> responseBodyConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter( Charset.forName("UTF-8")); return converter; } @Override public void configureMessageConverters( List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); converters.add(responseBodyConverter()); } @Override public void configureContentNegotiation( ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); } }
四、使用注解@RequestBody 致使接收的中文参数乱码,能够参考个人这篇博客(比较详细)http://www.javashuo.com/article/p-rxoskkrr-bz.html