网址中文乱码解决方法——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");
那么就会有人问了,那我编码一次,服务器解析一次,不就直接解析出中文了吗,我后端直接不解析不就行了?为什么要编码两次?
答案:你可以试试,在服务器到后端的过程中其实同前面一样,不能存在中文,否则就变成中文乱码,所以需要编码两次,以达到信息到达后端的时候可以通过解码直接得到中文信息。
有什么疑问可以在下方讨论区回复。