字符乱码出现的原因及解决办法
1.字符乱码出现的原因:
出现乱码是由于数据在传递和接受过程中字符编码格式不⼀致导致的。
for examples:
输⼊11-->在2进制中代表的是3
-->在8进制中代表的是9
-->在16进制中代表的17
  在这⾥同样输⼊的都是11,但是由于进制的不⼀样,所以代表的值也不⼀样。
同理,编码在底层都是⼀串字节码,由于编码格式的不同,⽐如以UTF-8编码格式进⾏编码,以iso8859-1编码格式就⽆法进⾏解析,所以所展现出来的字符串就不是原先的字符串了。
2.字符乱码的解决⽅式
2.1将乱码先进⾏编码,在进⾏解码(不管是get请求还是post请求都适⽤)
String userCount = UserCount();
//将乱码字符串按照错误的编码格式转换为原始的字节码序列
byte[] bs = Bytes("iso889-1");
//将原始的字节码序列使⽤正确的编码格式进⾏编码,转换为正确的⽂字
userCount  = new String(bs,"utf-8");
2.2使⽤spring框架构建项⽬的话可以使⽤编码过滤器(post请求⽅式)
在l中添加: 
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<servlet-name>springmvc</servlet-name>
</filter-mapping>
  <servlet-name>springmvc</servlet-name>说明只要请求被前端控制器拦截到,就会执⾏这个名称为encoding的filter。
CharacterEncodingFilter的源码如下:
public class CharacterEncodingFilter extends OncePerRequestFilter {
/*设置了两个属性encoding和forceEncoding,encoding代表的是编码格式,forceEncoding表⽰是否启⽤*/
private String encoding;
private boolean forceEncoding = false;
public CharacterEncodingFilter() {
}
public void setEncoding(String encoding) {
}
public void setForceEncoding(boolean forceEncoding) {
this.forceEncoding = forceEncoding;
一串好看的乱码}
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { /*当编码格式不为空以及forceEncoding为true时,那么设置就将服务器端的编码格式设置为配置⽂件中设置的编码格式*/
if (ding != null && (this.forceEncoding || CharacterEncoding() == null)) {
      //只能修改请求体中编码⽅式
request.ding);
if (this.forceEncoding) {
response.ding);
}
}
filterChain.doFilter(request, response);
}
}
所以需要在l中设置encoding和forceEncoding的初始化值
<filter>
<filter-name>encoding</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>encoding</filter-name>
<servlet-name>springmvc</servlet-name>
</filter-mapping>
2.3如果是本地的项⽬的话,可以在tomcat的配置⽂件l中修改编码格式 (get请求)<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
  在l配置⽂件下,添加属性URIEncoding="UTF-8"
总结:字符乱码问题需要分get请求和post请求。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。