servlet中文亂碼問題

    

經過response對象向頁面輸出內容時遇到的亂碼問題可分爲兩種狀況html

  1.字節流java

    字節流輸出時能夠經過設置響應頭"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");方法代替上述兩步操做。tomcat

經過request對象從請求中讀取內容時遇到的亂碼問題也可分爲兩種狀況編碼

  1.POST方式url

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

  2.GET方式server

    因爲在GET方式下,須要傳遞的內容直接存在於請求頭的url後,數據的編碼通常爲UTF-8,而url的默認編碼爲ISO-8859-1,通常來講有三種方式能夠解決中文亂碼問題。xml

    (修改配置文件中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");

相關文章
相關標籤/搜索