Web瀏覽器是否能正確顯示一個Web頁通常依賴兩個條件:
一、頁面的編碼(文件編碼).
二、該頁定義的contentType.
其中頁面的編碼是決定性的因素。兩者一致是,瀏覽器會正常顯示內容,否則有可能產生亂碼現像。
如果一個Html文件,文件編碼為UTF-8。contentType設為相同。則使用IE或Firefox查看,兩者都會自動選擇正確的編碼形式來解釋。當我將contentType設為GB2312,以為會造成亂碼,結果不會。我認為原因是這樣的:文件編碼起決定作用,加上Utf-8包括了GB該有的字符,所以這種情況是以大的來認識小的。沒問題。(不知是否有理解錯誤 :P)。
上述情況為使用瀏覽器直接把開網頁文件的結果。當我使用Webwork的Action時,將Html文件作為結果時(結果類型為dispatcher),亂碼出現了!文件編碼為UTF-8,頁面定義的ContentType為UTF-8。但是偏偏使用IE及FireFox均得到亂碼的結果。郁悶中用Firefox查看了頁面的屬性,驚奇地發現頁面編碼居然是GB2312。我猜想是Webwork在Dispatch頁面的時候使用了默認的編碼,把本來UTF-8編碼的頁面重新用GB2312編碼一次。于是試著在Action里面獲得Response并把字符編碼改為UTF-8。最后發現結果依然一樣。這時,我覺得在Action完成后,Webwork接下來使用了Response,我的設置被重置了。于是決定自已寫一個Servlet,指定字符編碼為UTF-8,結果直接Forward到我的Html頁面。結果正確了!再查看頁面信息,兩者都是UTF-8了。
平時使用Webwork來Dispatch的都是Jsp,不曾出現過這樣的情況。原因是Jsp仍需要編譯,編譯時會讀取Jsp頁面指定的ContentType來決定Response里的字符編碼。HTML文件則不一樣。這時只能使用默認編碼。如果我的工程是Gb2312,那根本就不存在剛才所講的問題的。