问题起始:
我在js中通过get方法发送一个带有中文的url
http://xxxxxxxxxx:8080/core/proxy.html?&XNAME=延安市
结果我在另一边收到的url是http://xxxxxxxxxx:8080/core/proxy.html?&XNAME=%D1%D3%B0%B2%CA%D0
我希望通过location.href 拿到这个url后解析这个参数,拿到这个延安市的中文。
解决过程:
之前我不知道这个是什么格式的字符。。之后查资料发现百度可以解析,将这个字符赋值到url
https://www.baidu.com/s?wd=%D1%D3%B0%B2%CA%D0
之后才发现原来%是用来分割中文的,而每一个字是里面的十六进制
而且这个是gb2312的,不同的编码格式,转成十六进制,比如
中国会被编码成
%D6%D0%B9%FA GBK GB2312 GB18030
%E4%B8%AD%E5%9B%BD UTF-8
%92%86%8D%91 Big-5等
%C3%E6%B9%F1 euc-jp等
如果是UTF-8可以直接在js中使用,decodeURI来解码。
decodeURI("%E6%98%A5%E8%8A%82")
而这里是gb2312的,查了很多资料,没有可以在js解决的
那我只能在java后端进行处理了、
我先测试了一下延安市encode后是否是这个。
发现是一样的,那么我们解码。
然后再传到之前的前台页面。
我们将十六进制通过url传到后台,需要注意
进行2次编码,否则会乱码的。
后台的话,如上图2次解码就好。