常見的html、伺服器、浏覽器之間連接配接傳輸時中文亂碼情況
-
html檔案傳給伺服器參數,發生中文亂碼
原因解釋
在html檔案中的form表單或者a标簽都可以響應伺服器,并傳給一些參數,但是由于Tomcat伺服器内部使用的是ISO-8599編碼,這種編碼識别不了中文,是以預設情況下傳入的參數要是中文就會亂碼
解決辦法
先獲得傳入的參數name在ISO-8599編碼下的位元組
再将得到的位元組用utf-8編碼形式轉化成字元串byte[] bname=name.getBytes("ISO-8859-1");
name=new String(bname,"UTF-8");
-
伺服器響應給浏覽器内容,中文亂碼
原因解釋
Tomcat伺服器響應給浏覽器内容時,是先将寫的内容全部放到緩存區,然後伺服器再從緩存區讀取,由于Tomcat伺服器内部使用的編碼是ISO-8859,是以讀取的過程并不能識别中文,如果浏覽器沒有自己解析加載調整編碼的話,就會出現中文亂碼
解決辦法
隻需要一步設定即可,在緩存區存内容之前設定好存放的編碼格式
response.setCharacterEncoding("UTF-8")
-
通常要讓浏覽器能夠識别傳入的中文,僅需上面一步是不行的,因為上面隻是解決了在伺服器内部存到緩存區并且讀取時中文亂碼的問題,但是沒有規定響應給的浏覽器是以什麼編碼接收
解決辦法
設定響應頭的ContentType屬性,告訴浏覽器以什麼形式接收内容并使用什麼編碼
response.setContentType("text/html;charset=UTF-8");
值得注意的是,使用了
response.setContentType("text/html;charset=UTF-8");
就不用再使用
response.setCharacterEncoding("UTF-8")
告訴緩存區使用什麼編碼緩存了,因為上面的那個方法告訴浏覽器使用UTF-8的編碼,自然伺服器内部的緩存區也使用UTF-8的編碼。