剛開始學習使用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的形式。