解決表單提交時的亂碼問題

爲什麼出現亂碼

​ 在html頁面中提交的數據會被封裝在請求request對象中,返回到服務器時,服務器端會默認按照ISO8859-1的編碼方式進行編碼(ps:老外的軟件默認編碼是識別英文和數字的ISO8859-1,關於字符集可以我在另一篇文章裏有專門提到),我們拿到的中文數據會是亂碼的,這是我們針對不同的請求方式,有分別的解決方案

get請求

​ 表單提交的數據會顯示在請求行中,也就是我們的瀏覽器搜索欄裏(從?開始,數據以鍵值對的形式跟在後面,中間用&符號隔開),我們可以使用IE瀏覽器的開發者工具–>網絡查看–>開始跟蹤來查看本次請求的內容(IE老版本可能內有”網絡”這一選項,建議使用高版本IE).在工具中我們可以看到我們請求的所有信息,包括(客戶端請求協議,版本,遠程地址,服務器端口號等內容),在我們的servlet伺服程序中可以針對get請求重寫doGet()方法,這裏,我們將數據按如下方式還原:

    byte[] buf = username.getBytes(“ISO8859-1”);按ISO8859-1編碼
     String username = new String(buf,”UTF-8”);按UTF-8解碼

這種方式是通用與get和post方式,get方式只能這樣來解碼和編碼.

post請求

​ 如上可知,如果我們的數據過多,那麼每一個用戶數據都需要經過那兩行代碼進行轉換,太過麻煩,所以我們的請求一般儘量按照post方式,因爲post方式有很方便的方法解決亂碼.代碼如下:

    request.setCharacterEncoding(“UTF-8”);針對請求體內容按UTF-8編碼
    request.getParameter(“username”)

因爲對用post請求,是將提交的數據放在請求體中,不會暴露在搜索欄中,將請求體中的內容通過setCahrracterEncoding方法對數據按照指定字符集編碼,這樣就不會出現亂碼.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章