網址中文亂碼解決方法——java的URLEncoder()跟URLDecoder()和js搭配java的encodeURI()跟URLDecoder()

網址中文亂碼解決方法——java的URLEncoder()跟URLDecoder()和js搭配java的encodeURI()跟URLDecoder()

關於網址包含中文,傳遞卻變成中文亂碼。
在前端到服務器到後端階段過程,如果存在中文需要傳遞,可以用網址來代替。
但是中文傳遞的過程中又會出現亂碼,對此可以使用java的URLEncoder()和URLDecoder(),或者js搭配java的encodeURI()和URLDecoder()。

環境是在:Java+Tomcat+JavaScript

java使用方法如下:

//導入URLEncoder類和URLDecoder類
import java.net.URLEncoder;
import java.net.URLDecoder;

//同一網頁,同程序下
String a="博客";
String luanma=URLEncoder.encode(a,"utf-8");
String zwa=URLDecoder.decode(luanma,"utf-8");

//不同網頁,不同程序下
//因爲將編碼後的中文傳遞給服務器,再傳遞給後端時,
//服務器會將編碼後的中文先解析一遍,傳遞到後端的時候又解析一遍
//所以需要對傳遞的中文編碼兩次!

String a="博客";
String luanma=URLEncoder.encode(URLEncoder.encode(a,"utf-8"),"utf-8");
//服務器解析,後端解析(總共兩次)
String zwa=URLDecoder.decode(luanma,"utf-8");


看到java的編碼和解碼過程後,可以指定js和java的encodeURI()跟URLDecoder()也是一樣的情況。如下:

***JavaScript***
<script>
//同樣的需要經過服務器解碼後再到後端解碼,所以利用兩次encodeURI()。
var a=encodeURI(encodeURI("博客"));
location = 'www.boke.com/boke.html?name='+a;
</script>

***Java***
import java.net.URLDecoder;

String name=URLDecoder.decode(request.getParameter("name"), "utf-8");

那麼就會有人問了,那我編碼一次,服務器解析一次,不就直接解析出中文了嗎,我後端直接不解析不就行了?爲什麼要編碼兩次?

答案:你可以試試,在服務器到後端的過程中其實同前面一樣,不能存在中文,否則就變成中文亂碼,所以需要編碼兩次,以達到信息到達後端的時候可以通過解碼直接得到中文信息。

有什麼疑問可以在下方討論區回覆。

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