1. 程式人生 > >SpringMVC頁面中文亂碼

SpringMVC頁面中文亂碼

pri Coding 頁面效果 servle 原理 type屬性 index.jsp 輸出 set

剛開始學習使用SpringMVC,完成配置之後開始編輯頁面源碼,添加了幾個中文字符(index.jsp)

<html>
<body>
<h2>hello world中文字符</h2>
</body>
</html>

  運行查看頁面效果,然後就是亂碼,一系列的折騰之後修改頁面源碼為

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<body>
<h2>hello world中文字符</h2>
</body>
</html>

  中文亂碼問題解決。詳細原理可以了解一下jsp從被請求到響應經歷的三個階段。

第一階段:將jsp編譯成Servlet(.java)文件。用到的指令是pageEncoding,根據pageEncoding=“XXX”的指示,找到編碼的規則為“XXX”,服務器在將JSP文件編譯成.java文件時會根據pageEncoding的設定讀取jsp,結果是由指定的編碼方案翻譯成統一的UTF-8編碼的JAVA源碼(即.java)。


第二階段:從Servlet文件(.java)到Java字節碼文件(.class),從UTF-8到UTF-8。在這一階段中,不論JSP編寫時候用的是什麽編碼方案,經過這個階段的結果全部是UTF-8的encoding的java源碼。JAVAC用UTF-8的encoding讀取java源碼,編譯成UTF-8編碼的二進制碼(即.class),這是JVM對常數字串在二進制碼(java encoding)內表達的規範。這一過程是由JVM的內在規範決定的,不受外界控制。


第三階段:從服務器到瀏覽器,這在一過程中用到的指令是contentType。服務器載入和執行由第二階段生成出來JAVA二進制碼,輸出的結果,也就是在客戶端可見到的結果,在這次輸出過程中,由contentType屬性中的charset來指定,將UTF8形式的二進制碼以charset的編碼形式來輸出。如果沒有人為設定,則默認的是ISO-8859-1的形式。

SpringMVC頁面中文亂碼