文檔出處:http://www.tkk7.com/badboyryan/archive/2007/01/05/91997.html
同事在用IBM Portal的WEB剪切的時候,預覽效果的時候發現頁面全部是亂碼why?
其實這個問題是編碼的問題,理解了jsp里面的編碼是解決問題的關鍵,看看這段代碼:
<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="GB18030"%>
<%@ taglib uri="<%@ taglib uri="<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<tiles:insert page="/common/tiles/level2pageTiles.jsp" flush="true">?
????? <tiles:put name="header" value="/daohang/shouye/display_l_1_indexHeader.jsp" />
????? <tiles:put name="top" value="/common/jsppage/top.jsp" />
????? <tiles:put name="middle" value="/daohang/shouye/display_l_1_indexMiddle.jsp"/>
????? <%-- 帶計數器的為/common/jsppage/bottom2.jsp --%>
????? <tiles:put name="bottom" value="/common/jsppage/bottom.jsp"/>
</tiles:insert>
我們看到:pageEncoding="GB18030"的作用是表示了該JSP文件使用的編碼方式,這個屬性主要是用于應用服務器在解析JSP文件,并轉換為servlet時使用;
contentType="text/html; charset=gb2312" 的作用是:表示該網頁采用GB2312國標碼,這也是簡體中文標準版本,如果不加,部分瀏覽器會自動選擇編碼,從而導致亂碼出現,所以最好還是要加上;
<meta ? http-equiv=″Content-Type″ ? content=″text/html; ? charset=gb2312″> ? ???
? <!--網頁內容類型,TXT或HTML格式,編碼方式為GB2312 ? --> ? ??
因為JSP要經過兩次編碼, 第一階段會用到pageEncoding, 第二階段會用 utf-8 至utf-8, 第三階段就是由web容器出來的網頁, 用的是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, 就發揮了功效.
Portal WEB剪切出現亂碼是因為原始剪切源的原因而引起的需要注意在頁面里面把編碼方式寫全、寫對基本就沒有問題了,還有注意如果出現?說明是在字符集中找不到這個字符就是瀏覽器解析不了,比如 ;解決的辦法把他替換為全角的空格;
posted on 2007-01-05 15:00
壞男孩 閱讀(1638)
評論(1) 編輯 收藏 所屬分類:
java命令學習