1. 程式人生 > >jsp pageEncoding屬性詳解

jsp pageEncoding屬性詳解

都是 body code -s utf ati 英文 一次 設定

Java pageEncoding原理詳解

首先看下文章解釋:

技術分享圖片

意思是jsp文件本身的編碼

巨大的疑問:這裏有一個很大的問題,既然你都已經從jsp中讀到了這條屬性,證明內容讀取正確,那你還需要知道這條屬性所指的編碼是什麽幹嘛?

下面務必來看看Jsp的編譯原理

第一階段是jsp編譯成java

它會根據pageEncoding的設定讀取jsp,結果是由指定的編碼方案翻譯成統一的UTF-8 JAVA源碼(即.java),如果pageEncoding設定錯了,或沒有設定,出來的就是中文亂碼。

第二階段是由JAVAC的JAVA源碼至java byteCode的編譯

不論JSP編寫時候用的是什麽編碼方案,經過這個階段的結果全部是UTF-8的encoding的java源碼。

JAVAC用UTF-8的encoding讀取java源碼,編譯成UTF-8 encoding的二進制碼(即.class),這是JVM對常數字串在二進制碼(java encoding)內表達的規範。

第三階段是Tomcat(或其的application container)載入和執行階段二的來的JAVA二進制碼

輸出的結果,也就是在客戶端見到的,這時隱藏在階段一和階段二的參數contentType就發揮了功效

-----------------------------------------------------------------------------------------------------------------------------------

概括流程:讀取jsp -> 編譯成java文件 -> 編譯成class文件

可以得出:

第一次讀取jsp時所用的編碼肯定不是pageEncoding所指定的編碼,因為既然能讀到pageEncoding的屬性的時候,肯定就知道jsp文件的編碼,因為pageEncoding在jsp文件當中,不可能不讀jsp文件就知道pageEncoding的屬性

重點:

那麽既然jsp都被讀出來了,還需要pageEncoding屬性(設置讀取jsp文件的編碼)幹嘛

原因是,這裏的讀取是指的,編譯成.java文件時,讀取jsp的編碼

分析原理就是:

用默認編碼打開jsp得到pageEncoding屬性 -> 使用pageEncoding屬性設置的編碼再次讀取jsp -> 編譯成.java文件

有意思的地方就在這裏了,有人會問第一步用默認編碼能獲得未知編碼的jsp文件中的pageEncoding嗎,你怎麽知道jsp文件用的是什麽編碼呢,那麽,請仔細想想,pageEncoding屬性的語言是英文,java所支持的編碼是不是都是支持英文的呢

所以jsp文件編碼、pageEncoding指定編碼、Content-Type編碼一致才能正確顯示數據就是這個原因

相信已經透徹的講了,已經沒有能夠濃縮的地方了,有什麽不懂可以留言,一般常在,盡量幫你解決,伸出小手點個贊,謝謝 = =

jsp pageEncoding屬性詳解