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