java 前端与后端联动中文字符编码问题

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:嫉妒是承认自己不如别人的表现!!!!!!!






阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunrise_zhu/article/details/53139202
文章标签: 乱码
个人分类: servlet
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭