解决web项目中的乱码问题

一、乱码产生的原因

不用多说,就是字符编码不一致,Tomcat服务器默认字符编码是ISO8859-1,前端页面一般是utf-8,。这就像进制一样,同样的数字,按照不同的进制去读会得到不同的结果。

二、解决乱码

1、思路

进制是怎样转换的?比如二进制转十六进制,我们会先把二进制转换为最初始的十进制,然后再把转换出来的十进制数转换为十六进制。乱码的解决也是一样。

2、解决

1)方式一
//将乱码字符串按照错误的编码方式转换为原始的字节码序列
byte[] bs=要转换的字符串.getBytes("ISO8859-1");

//将原始的字节码序列按照正确的编码转换为正确的文字
要转换的字符串=new String(bs,"UTF-8");

显然,这种方式太过笨重,如果要转换的字符串较多,将不堪设想,所以不如方式二

2)方式二
1.POST方式提交的请求:

使用spring提供的过滤器

在web.xml中添加如下配置

<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>

注意:

  • 两个filter-name要相同
  • filter-mapping中的 springmvc是关联了是springMVC的DispatcherServlet,这样只要被DispatcherServlet拦截的请求,都会经过该过滤器
  • 这种方式只能设置请求体的字符编码,不能设置地址栏的字符编码,所以如果要设置请求头的字符编码,需采用下面的方式。
2.GET方式提交的请求:

修改Tomcat的server.xml

找到你使用的端口所在的Connector标签,添加:URIEncodeing="UTF-8",如下:

 <Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

代码书写世界,吉他演奏生活