javaWEB專案中的中文亂碼問題總結
阿新 • • 發佈:2018-12-30
寫這篇部落格主要就是在做專案的時候,碰到後臺到前臺資料亂碼的問題,並藉此總結平常碰到的各種編碼設定,並且也百度了很多,有時候也是經常想不起來,所以記錄一下,方便以後檢視!!!
場景:
在實際運用場景中,當前臺發起請求後,我們需要從後臺返回資料給前臺(前臺模糊查詢),這時,如果返回的資料中包含中文,則經常會出現在後臺查詢出來都是好好,但是傳輸回去就莫名的亂碼了,而且,我們明明已經在 web.xml 中進行編碼過濾了,但還是亂碼,讓人很煩!
解決辦法:
第一種:那就在 controller 中的每個方法的 @RequestMappering 註解中進行編碼設定
@RequestMapping(value = "/queryUserById",produces = "text/plain;charset=utf-8")
上面這種可以解決亂碼,但是要在沒一個註解中都寫上這種,感覺程式碼看起來也不美觀,而且都是做著重複的動作,所以,本人很喜歡用第二種方法。
第二種:直接在spring-mvc.xml的配置檔案中,自定義訊息轉換器的編碼,這樣就可以設定一次就行了
<!-- 解決前臺到後臺傳引數造成的中文亂碼問題 --> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=utf-8</value> <value>text/html;charset=utf-8</value> <value>application/x-www-form-urlencoded</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
以上就可以解決不用配置多次,重複寫一樣的程式碼就可以解決,有的人可能習慣這樣寫,有的不習慣,所以也有很多種方法,大家也可以完全寫編碼自定義類,然後交給spring處理,都是可以的。
第三種:設定tomcat編碼:為解決以get方式提交的引數出現亂碼,新增
修改tomcat下的conf/server.xml檔案, 新增URIEncoding=”UTF-8”
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
第四種:可以在每一個方法內的最前面加上以上程式碼
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
最基本配置就是在web.xml中採用編碼過濾器來解決資料傳輸的中文問題。在WEB.XML中配置一個編碼過濾器,內容如下:
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
解決HTML頁面中的中文問題:
<META http-equiv=Content-Type content="text/html;charset=utf-8">
解決JSP頁面中的中文問題
<%@ page contentType="text/html;charset=utf-8" language="java"%>
如果以上寫的哪裡有問題,請敬請諒解!