utf8過濾器
1. JSP編碼過濾器,但是Servlet輸出還是亂碼
別懶,網上多的是。下面給你個常用的,關鍵要理解原理:
關於contentType 和 pageEncoding 的區別以及JSP中文處理內幕
contentType — 指定的是JSP頁最終 Browser(客戶端)所見到的網頁內容的編碼.
就是 Mozilla的 Character encoding, 或者是 IE6的 encoding. 例如 JSPtw Forum 用的contentType就是 Big5.
pageEncoding — 指定JSP編寫時所用的編碼
如果你的是 WIN98, 或 ME 的NOTEPAD記事本編寫JSP, 就一定是常用的是Big5 或 gb2312, 如果是用 WIN2k winXP的NOTEPAD時, SAVE時就可以選擇不同的編,碼, 包括 ANSI(BIG5/GB2312)或 UTF-8 或 UNIONCODE(估是 UCS 16). 因為 JSP要經過 兩次的」編碼」:
第一階段會用 pageEncoding, 第二階段會用 utf-8 至utf-8, 第三階段就是由TOMCAT出來的網頁, 用的是contentType.
階段一是 JSPC的 JSP至JAVA(.java)原碼的」翻譯」, 它會跟據 pageEncoding 的設定讀取JSP. 結果是 由指定的pageEncoding(utf-8,Big5,gb2312)的JSP 翻譯成統一的utf-8 JAVA原碼(.java). 如果pageEncoding設定錯了, 或沒設定(預設 ISO8859-1), 出來的 在這個階段 就已是中文亂碼.
階段二是由 JAVAC的JAVA原碼至JAVA BYTECODE的編譯. 不論JSP的編寫時是用(utf-8,Big5,gb2312),經過階段一的結果全都是utf-8的ENCODING的JAVA原碼.JAVAC用 utf-8的ENCODING讀取AVA原碼, 編譯成字元串是 utf-8 ENCODING的二進制碼(.class). 這是 JAVA VIRTUAL MACNHINE對常數字元串在 二進制碼(JAVA BYTECODE)內表逹的規范.
階段三是TOMCAT(或其的application container)載入和執行階段二得來的JAVA二進制碼, 輸出的結果( 也就是BROWSER(客戶端))
見到的. 這時一早隱藏在階段一和二的參數contentType, 就發揮了功效. (見 階段一的 ).
response.setContentType(」text/html; charset=utf-8″);
出來的可以是 utf-8, Big5, gb2312, 看的就是JSP ? contentType的設定.
<%@ page session=」false」 pageEncoding=」big5″ contentType=」text/html; charset=utf-8″ %>
還有, pageEncoding 和contentType的預設都是 ISO8859-1. 而隨便設定了其中一個, 另一個就跟著一樣了(TOMCAT4.1.27是如此).但這不是絕對, 看的各自JSPC的處理方式. 而pageEncoding不等於contentType, 更有利亞洲區的文字 CJKV系JSP網頁的開發和展示,(例pageEncoding=Big5 不等於 contentType=utf-8).一個簡單的解決方法是在包含和被包含文件的開始部分都加上:
<%@ page contentType=」text/html;charset=GB2312″ language=」java」 %>
---------------------------------------------------------------
ContentType
ContentType屬性指定了MIME類型和JSP頁面回應時的字元編碼方式。MIME類型的默認值是「text/html」; 字元編碼方式的默認值是「ISO-8859-1」. MIME類型和字元編碼方式由分號隔開
pageEncoding的內容只是用於jsp輸出時的編碼,不會作為header發出去的。
pageEncoding 是通知web server jsp的編碼。
pageEncoding
在JSP標準的語法中,如果pageEncoding屬性存在,那麼JSP頁面的字元編碼方式就由pageEncoding決定,否則就由contentType屬性中的charset決定,如果charset也不存在,JSP頁面的字元編碼方式就採用默認的ISO-8859-1。
2. eclipse web項目的編碼過濾器,統一設置成UTF-8
過濾器中的內容:
private static final long serialVersionUID =85757L;
private String encoding;
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg0.setCharacterEncoding(encoding);
arg1.setCharacterEncoding(encoding);
arg2.doFilter(arg0, arg1);
}
public void init(FilterConfig arg0) throws ServletException {
encoding=arg0.getInitParameter("encoding");
}
web.xml文件中 添加過濾器
<filter>
<filter-name>類名</filter-name>
<filter-class>類名全路徑(包括包名)</filter-class>
<init-param><!--參數 與過濾器中的encoding對應 encoding的實際值是utf-8-->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
3. javaweb,給HTML文件加上過濾器以後,HTML顯示亂碼。
那是你的瀏覽器不識別Content-Type,採用了默認的GBK/GB2312編碼顯示,這個可以在打開頁面「右鍵-編碼」看版到;meta最好權給一個結束符,即:<meta http-equiv="content-type" content="text/html; charset=utf-8" />
4. struts2配置的web項目 提交數據出現中文亂碼,全都是utf-8 配置有過濾器 tomcat也修改為utf-8 不能解決
在修改埠號旁邊加入:URIEncoding="UTF-8"