servlet中文亂碼問題


    

通過response對象向頁面輸出內容時遇到的亂碼問題可分為兩種情況

  1.字節流

    字節流輸出時可以通過設置響應頭"Content-Type"的值為"text/html;charset=UTF-8"來制定瀏覽器打開頁面時用的編碼,並在寫入時通過相應編碼傳入字符串的字節數組,如 通過"中文".getBytes("UTF-8")獲取中文部分的UTF-8編碼的字節數組。

  2.字符流

    response字符流對象中存在一個緩沖區,用來將字符串轉換為指定編碼的字節數組,默認情況下response緩沖區的編碼默認值是ISO-8859-1,因此如不加以設定,中文內容必定會呈現亂碼。可以通過response.setCharacterEncoding("UTF-8")方法來設置緩沖區的編碼,再通過response.setHeader("Content-Type", "text/html;charset=UTF-8");將瀏覽器打開頁面的編碼設置為與緩沖區編碼相同,為了簡化書寫,java提供了response.setContentType("text/html;charset=UTF-8");方法代替上述兩步操作。

通過request對象從請求中讀取內容時遇到的亂碼問題也可分為兩種情況

  1.POST方式

    POST方式下,存在一個緩沖區,用來將請求體中的內容由字節流通過指定編碼解碼為字符流,默認情況下緩沖區的默認編碼為ISO-8859-1,要解決亂碼問題,只需通過request.setCharacterEncoding("utf-8"); 方法將緩沖區編碼指定為UTF-8即可。

  2.GET方式

    由於在GET方式下,需要傳遞的內容直接存在於請求頭的url后,數據的編碼一般為UTF-8,而url的默認編碼為ISO-8859-1,一般來說有三種方式可以解決中文亂碼問題。

    (修改配置文件中uri的編碼方式)

    解決方案一:修改tomcat/conf/server.xml 

        <Connector port="80" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" URIEncoding="utf-8"/>

    (獲取亂碼內容后通過ISO-8859-1編碼表反向查出原始數據,再通過UTF-8碼表查出正確內容)

    解決方案二:逆向編解碼
        username = URLEncoder.encode(username, "ISO8859-1");
        username = URLDecoder.decode(username, "utf-8");

    解決方案三:簡寫的方式(推薦使用)
        username = new String(username.getBytes("ISO-8859-1"),"utf-8");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM