其實,java系統內部會把全部的字符串統一使用UTF-8編碼,而在內部轉化之前會使用操作系統默認的編碼,其中包括輸入和輸出。要想不亂碼,只需要
“統一java系統的輸入、輸出以及操作系統的字符集”,這也是處理java系統漢字的一個原則。原因是由於java的跨平臺特性,字符集必須由具體的操
作系統給出。
由此可以得到一個最簡單的解決jsp亂碼的辦法,其中主要需要把握三個環節:
1、開發和編譯代碼時就指定一個字符集,比如ISO-8859-1(西方的系統多數使用這個)
2、確定操作系統的字符集跟1統一,比如也用ISO-8859-1,這樣的OS有很多,linux就是啦
3、如果開發jsp,每個頁面都明確指定字符集:
<%@ page contentType="text/html;charSet=ISO8859-1" %>
這樣就達到了前面的目標,統一了三者的字符編碼。
這樣的系統雖然很好,沒有亂碼問題,但是顯然是以破壞跨平臺特性爲代價換取來的。想要根本解決問題,看來只有將java系統統一爲UTF-8編碼,這需要找到所有的出入口。
具體需要注意以下幾個環節:
1、開發和編譯時候指定字符集爲UTF-8
2、用過濾器將所有請求轉爲UTF-8字符集編碼
如果是用一個servlet控制分配的就在servlet的filter中寫
request.setCharacterEncoding("UTF-8")
如果是用jsp頁面,就在頭部定義
<%@ page contentType="text/html;charSet=UTF-8" %>
3、在所有的輸出上包括數據庫連接上都指定使用字符集UTF-8
另外:如果你在做二次開放,就需要重新編譯包,指定使用UTF-8編碼
附:在編譯時指定字符集的語法是javac -encoding <encoding> <sourcefile>
說明:這裏很多觀點是引用他人的,但是我自己使用過,是絕對有效的解決辦法。