在做web項目的時候,經常會遇到中文顯示亂碼 和 中文傳參亂碼的問題,在這裏整理一份解決方案
首先,頁面和傳參出現亂碼的原因:頁面經過web服務器,瀏覽器處理,所以造成轉碼或者亂碼的原因,可能涉及到:頁面本身的設置、web服務器的設置、瀏覽器的設置
1、頁面上設置編碼 :
(a)頁面是jsp,對於這個,需要在jsp頭部加上 page的編碼設置XML/HTML code
?
1
|
[size=1em] [size=1em]<%@ page contentType="text/html;charset=UTF-8" trimDirectiveWhitespaces="true" language="java" %>
|
(b)頁面是html,html頭部加上meta標籤:XML/HTML code
?
1
|
[size=1em]<[size=1em]meta [size=1em]http-equiv[size=1em]=[size=1em]"Content-Type" [size=1em]content[size=1em]=[size=1em]"text/html; charset=utf-8" [size=1em]/>
|
(c)如果是引入jsp,c:import的方式,在tomcat是沒問題的,但是在weblogic中容易亂碼,例:XML/HTML code
?
1
|
[size=1em]<[size=1em]c:import [size=1em]url[size=1em]=[size=1em]"/jsp/system/panelBar.jsp" [size=1em]charEncoding[size=1em]=[size=1em]"UTF-8"[size=1em]></[size=1em]c:import[size=1em]>
|
這裏記得加上編碼設置
另參考文章:對於contentType和pageEncoding設定的解釋
深入解析java web中文編碼
2、web服務器的設置以及程序設置:
(a)項目web.xml編碼設置:頁面顯示和傳參亂碼,可能是web.xml沒配置請求編碼,這裏需要加上以下配置就ok:
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[size=1em]<!--spring編碼過濾器start -->
[size=1em] [size=1em]<filter> [size=1em] [size=1em]<filter-name>encodingFilter</filter-name> [size=1em] [size=1em]<filter-[size=1em]class[size=1em]> [size=1em] [size=1em]org.springframework.web.filter.CharacterEncodingFilter [size=1em] [size=1em]</filter-[size=1em]class[size=1em]> [size=1em] [size=1em]<init-param> [size=1em] [size=1em]<param-name>encoding</param-name> [size=1em] [size=1em]<param-value>UTF-[size=1em]8[size=1em]</param-value> [size=1em] [size=1em]</init-param> [size=1em] [size=1em]<init-param> [size=1em] [size=1em]<param-name>forceEncoding</param-name> [size=1em] [size=1em]<param-value>[size=1em]true[size=1em]</param-value> [size=1em] [size=1em]</init-param> [size=1em] [size=1em]</filter> [size=1em] [size=1em]<filter-mapping> [size=1em] [size=1em]<filter-name>encodingFilter</filter-name> [size=1em] [size=1em]<url-pattern>/*</url-pattern> [size=1em] [size=1em]</filter-mapping> [size=1em] [size=1em]<!--spring編碼過濾器end --> |
(b)tomcat 的service.xml加上編碼設置: 對於亂碼問題,誰也把握不好直接說沒問題,如果以上還不能解決,修改tomcat的配置,在端口設置時,加上編碼設置,如下:
Plain Text code
?
1
|
[size=1em]<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
|
(c) 如果項目部署在linux 上, 可查看linux編碼,命令:/etc/sysconfig/i18n(沒權限是看不到的),結果如下:
Plain Text code
?
1
2
3
|
[size=1em]LANG="zh_CN.UTF-8"
[size=1em]SUPPORTED="zh_CN.UTF-8:zh_CN:zh" [size=1em]SYSFONT="latarcyrheb-sun16" |
(d)應用服務器如果是weblogic(這是我最頭疼的),這裏需要在weblogic.xml中加上如下配置:
XML/HTML code
?
1
2
3
4
5
6
|
[size=1em]<[size=1em]charset-params[size=1em]>
[size=1em]<[size=1em]input-charset[size=1em]> [size=1em]<[size=1em]resource-path[size=1em]>/*</[size=1em]resource-path[size=1em]> [size=1em]<[size=1em]java-charset-name[size=1em]>UTF-8</[size=1em]java-charset-name[size=1em]> [size=1em]</[size=1em]input-charset[size=1em]> [size=1em]</[size=1em]charset-params[size=1em]> |
(e)其他程序編碼設置,比如設置request.setCharacterEncoding("utf-8"); 等等。切記,頁面請求時,get請求很容易出現中文亂碼問題。能post提交就post,不能的話,就要考慮編碼問題了
3、瀏覽器設置編碼
很多瀏覽器都有默認編碼,我們可以選擇和切換,例:chrom修改編碼:選擇右上角的三條橫崗——>更多工具——>編碼——>選擇你需要的編碼格式