web項目顯示亂碼解決方案

在做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修改編碼:選擇右上角的三條橫崗——>更多工具——>編碼——>選擇你需要的編碼格式

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