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:嫉妒是承認自己不如別人的表現!!!!!!!






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章