JavaWeb servlet,亂碼的原因和解決


請求為什么會有亂碼?

  答:當表單提交時,瀏覽器對中文參數值進行編碼(使用打開表單所在的頁面時的字符集進行編碼,web服務器在默認情況下會使用iso-8859-1去解碼,編碼和解碼方式不一致,就會產生亂碼。

解決方案:request.setCharacterEncoding("UTF-8");對於get 還要在tomcat服務器目錄下的conf文件夾下找到server.xml文件,打開進行如下配置

 

 

 

如何查看頁面的字符集編碼方式?

 

圖中紅框內就表示表單所在的頁面的字符集,此時因為表單的字符集是iso-8859-1所以服務器就不用設置解碼方式,中文依然不會亂碼。

response響應回瀏覽器出現中文亂碼?

  getOutputStream();:

    使用該字節輸出流,不能直接輸出中文,會出異常,要想輸出中文,解決方法如下

    解決:getOutputStream().write(xxx.getBytes("UTF-8"));  //手動將中文用UTF-8碼表編碼,變成字節傳輸,變成字節后,就不會報異常,並且tomcat也不會在編碼,因為已經編碼過了,所以到瀏覽器后,

                                如果瀏覽器使用的是UTF-8碼表解碼,那么就不會出現中文亂碼,反之則出現中文亂碼,所以這個方法,不能完全保證中文不亂碼

  getWrite();:

    使用字符輸出流,能直接輸出中文,不會出異常,但是會出現亂碼。

    解決:通知tomcat和瀏覽器使用同一張碼表。

    response.setContentType("text/html;charset=utf-8");  //通知瀏覽器使用UTF-8解碼 

    通知tomcat和瀏覽器使用UTF-8編碼和解碼。這個方法的底層原理是這句話:response.setHeader("contentType","text/html;charset=utf-8"); 

  注意:getOutputStream()和getWrite() 這兩個方法不能夠同時使用,一次只能使用一個,否則報異常    

 


免責聲明!

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



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