天天看點

servlet中文亂碼方法

1 送出頁編碼為:GBK

2 servlet擷取送出值用gbk解碼

String s=new String(request.getParameter("tbxname").getBytes("ISO-8859-1"),"GBK");

 out.println(s);

原因請參考(引):

在 servlet引擎實作 request.getParameter("myparam")時,會先在一個緩存裡找一下,如果沒有,就會開始解析參數并把解析後的參數和其對應的值放入緩存中。而在解析參數時,servlet規範中規定:首先按照 request.getCharacterEncoding擷取的編碼對解析出來的byte進行編碼,建立新的字元串。如果request.getCharacterEncoding 的值是null,則按照ISO-8859-1來進行編碼。而現在大多的浏覽器在發送資料時都沒有發送用戶端的資料編碼。是以在沒有預先設定過的情況下,引擎應該都是按着ISO-8859-1來處理參數的值。

    假如表單的參數實際值是“中國” 那麼按着GBK的編碼送出到伺服器端的myparam的值對應的應是4個byte.假設 解析出來的byte 是paramBytes,那麼引擎為我們放入參數緩存中的參數值就是這樣的 new String(paramBytes,encoding);很明顯本來2個位元組參能表達一個漢字 ISO-8859-1來編碼之後,每個位元組都成了單獨的一個字元:4個位元組成了四個字元,這就是我們看到的亂碼出現的原因。

請參考:ISO-8859-1

http://wiki.ccw.com.cn/ISO_8859-1

部落格園大道至簡

http://www.cnblogs.com/jams742003/

轉載請注明:部落格園

繼續閱讀