各种中⽂乱码解决办法
在编程的时候会遇到各种中⽂乱码,这⾥进⾏统计以便以后查阅
url编码和utf8区别1、前端页⾯元素中⽂乱码
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
会出现下⾯乱码
页⾯上的元素也就是html内的元素,是中⽂的会出现乱码,⽽从后台获取的中⽂不会出现乱码。
解决⽅法:页⾯上设置编码⽅式为UTF-8
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
2、URL传参、get⽅式传参出现中⽂乱码,如下
出现这种情况,要先确定参数在前台页⾯上不是乱码的,可以alert()⼀下,看参数是否乱码
解决办法1:
对于以get⽅式传输的数据,request默认使⽤ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,⽽服务器端的request对象使⽤的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不⼀致因此才会产⽣中⽂乱码的。
解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id= Parameter("id");
id=new Bytes("ISO8859-1"), "UTF-8") ;
}
解决⽅法2:
修改tomcat服务器的编码⽅式,可以在l⾥⾯设置
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
设置成红字部分,但是有时也是不可⽤的,因为即使这⾥设置的是UTF-8但是其他地⽅设置成其他编码⽅式会覆盖掉这个设置,仔细检查各个地⽅的编码。
⽐如Spring Boot 的application.properties配置⽂件⾥设置成at.uri-encoding=GBK就会覆盖掉tomcat⾃⼰的设置,我这⾥是打个⽐⽅,因为SpringBoot是内置Tomcat服务器的。
解决办法3:中⽂参数进⾏编码处理
id="+encodeURI(encodeURI("中⽂参数"));
后台:
String name = Parameter("name");
String str = URLDecoder.decode(name,"UTF-8");
3、POST⽅式出现中⽂乱码
原因:因为服务器和客户端沟通的编码不⼀致造成的,因此解决的办法是:在客户端和服务器之间设置⼀个统⼀的编码,之后就按照此编码进⾏数据的传输和接收。
解决⽅法:由于客户端是以UTF-8字符编码将表单数据传输到服务器端的,因此服务器也需要设置以UTF-8字符编码进⾏接收
1、后台代码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");//注意要在getParameter之前设置
String id= Parameter("id");
}
2、如果使⽤的是框架的话,可以统⼀设置字符过滤器,这⾥以 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>
3、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) {
converters.add(responseBodyConverter());
}
@Override
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论