Form表單提交資料的亂碼問題

2021-08-10 23:17:57 字數 2081 閱讀 2092

form表單以post方式提交資料

瀏覽器將資料(假設為「中國」)傳送給伺服器的時候,將資料變成0101的二進位制資料(假設為98 99)時必然要查碼表,瀏覽器以哪個碼表開啟網頁,瀏覽器就以哪個碼表提交資料。資料到達伺服器後,資料(98 99)要封裝到request中,在servlet中呼叫request的getparameter方法返回的是字串(「中國」),方法內部拿到數字後要轉成字元,一定要查碼表,由於request的設計者是外國人,所以預設查的是他們常用的iso8859-1,這就是請求資料產生亂碼的根源。

解決方式:

三條語句即可搞定

//告訴伺服器是以何種方式解碼

//瀏覽器使用何種方式進行編碼傳遞資料,那麼就應該指示伺服器以何種方式解析資料,從而獲得原來的資料

request.setcharacterencoding("utf-8");

//響應客戶端的請求時,告知伺服器應該使用何種方式進行編碼

response.setcharacterencoding("utf-8");

//告訴客戶端應該以何種方式進行解碼,即解析伺服器發來的資料,保證解碼編碼方式相同,才能保證獲得原來的資料而不出現亂碼

response.setheader("content-type","text/html;charset=utf-8");

"text/html;charset=utf-8");

form表單以get方式傳送資料

get方式依舊是瀏覽器使用什麼碼表那麼就使用什麼碼表編碼資料進行傳送。不同的是,以get方式提交資料時,request設定編碼無效。即使設定了utf-8還是會去查iso8859-1。得到(? ?),要解決這個問題,需要拿著(??)反向查iso8859-1,拿到(98 99)後,再去查正確碼表。

request.setcharacterencoding("utf-8");//以get方式提交資料時,request設定編碼無效。即使設定了utf-8還是會去查iso8859-1

string username = request.getparameter("username");

//先使用iso8859-1編碼,然後再利用utf-8進行編碼

username = new

string(username.getbytes("iso-8859-1"),"utf-8");

總結:

1.如果提交方式為post,想不亂碼,只需要設定request物件的編碼即可。

注意:客戶機資料是以哪種方式提交的,request就應該設成什麼編碼。
2.如果提交方式為get,設定request物件的編碼是無效的,想不亂碼,只能手工轉換。

string data = "???????";//亂碼字串

byte source = data.getbytes("iso8859-1");//得到客戶機提交的原始資料

data = new

string (data.getbytes("iso8859-1"),"utf-8");//解決亂碼

//等同於

data = new

string (source,"utf-8");

3.get方式的亂碼,還可以通過更改伺服器配置的方式實現。更改tomact的conf目錄下的server.xml檔案

1.這種方式並不推薦,因為更改了伺服器且並不靈活。

2.這麼設定後,request的setcharacterencoding設定什麼編碼,聯結器就用什麼編碼,雖然比上一種更改靈活,但依然會導致我們的應用程式牢牢依賴於伺服器,也不被推薦。

url位址後面如果跟了中文資料,一定要經過url編碼。表單提交的引數有中文資料,瀏覽器會自動幫我們編碼,但如果是通過鏈結直接帶中文引數,瀏覽器是不會幫我們編碼的,這時想通過上述第二種方式解決中文亂碼問題就時靈時不靈了,應該通過urlencoding.encode(「utf-8」)先編碼。

form表單提交中文亂碼問題

今天在做乙個小專案時,遇到了form表單提交到資料庫中的中文亂碼情況。經過打斷點排查原因,發現是 在執行存資料庫操作之前就已經亂碼了。經過一番檢查,發現了問題所在,特此記錄下。設定 request物件的編碼 即可。注 客戶端資料是以什麼編碼格式提交的,就設定什麼編碼格式。如我在前端設定為 utf 8...

form表單提交問題

1.提交後不能跳轉到指定頁面 jsp js提交事件處理 btn primary click function function data 這種寫法在頁面點選儲存後在當前頁面跳轉,而不執行post請求function data 中的方法 window.history.back 返回到上一級歷史頁面,分...

form表單提交伺服器,資料獲取亂碼問題

今天做練習的時候用form表單獲取資料,傳到伺服器然後通過jsp回傳到客戶端。中間出現了亂碼的問題 在jsp中寫的中文是正常顯示的,只有獲取到的資料是亂碼的,那就說明亂碼問題是從客戶端傳送到伺服器端的問題。在表單頁面,編碼格式,檔案型別全是utf 8型別的 jsp中,request.setchara...