web项目前端与后端联动中文字符编码问题
web项目中往往需要将中文字符从前端传递到后端,或者从后端传递前端,这时你有可能会遇到中文乱码问题,究其原因是前端,服务器,后端编码格式不一致导致的,关系如下图:
由于前端浏览器默认的编码格式是GBK,服务器Tomcat的编码格式为ISO-8895-1,而后端的编码格式是utf-8导致的,解决这问题就是在后端传递数据与接收数据时改变下编码格式:
一.接收前端传递的String数据
拿注册时用户名来举一个栗子,在servlet接收用户名时利用
getBytes(String
charsetName),使用指定的字符集将此String
编码为 byte 序列,并将结果存储到一个新的 byte 数组中。再用String(byte[] bytes,String charsetName)
通过使用指定的charset 解码指定的 byte 数组,构造一个新的String
。
关键代码如下:
String user = new String(request.getParameter("user").getBytes("ISO-8859-1"),"utf-8");还有另外一种解决方案就是在web.xml中配置过滤器,这种方法是在项目中被广用的方法,也省去了对很多字段进行转码的麻烦,优先推荐这种方式.
<!-- 中文过滤器 -->
<!-- 过滤request与respone的 -->
<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>
</filter>
<!-- 中文过滤器的mapping -->
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>这么配置后从前端到后端传字段时就不用再考虑编码不兼容问题了。
还有另外一种情况会出现乱码问题,那就是当用get的请求方式时候,传输中文会出现乱码,这时可以改变Tomcat监视端口的编码来解决
在conf目录下找到server.xml文件打开,找到port="8080"所对应的标签,在标签最后面加上URIEncoding="UTF-8",重启服务器即可,关键代码如下:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
二.从后端传递数据到前端
有两种方式可以达到目的
方法一:
response.setContentType("text/html;charset=utf-8");方法二:response.setHeader("Content-Type","text/html;charset=utf-8");
ps:嫉妒是承认自己不如别人的表现!!!!!!!