处理URL参数中包含有中文参数URL字符串问题

       当URL参数中含有URL字符串的时候,而该字符串还包含有中文,这个时候处理起来会比较恶心,通过yi一段时间摸索,发现可以用base64来解决这个问题:

背景:由于需要请求目标应用不支持JSONP,需要使用另外一个应用做一个中转。客户端是UTF-8编码,作为中转的应用是GBK编码,需要请求的目标应用又是需要UTF-8编码;

 

常规的思路是:

前台传输来的相应编码的URL,后台就用该编码的解码,URLDecoder.decode(params,"encodeType");

但是一般的MVC框架或者应用服务器,在绑定参数的过程中都解码了一次,前台如果想要让后端按照指定编码格式手动解码,需要encodeURIComponent两遍,第一遍框架或应用服务器解码,第二遍自己手动解码

但是这里出现的问题不常规,使用常规方式又比较麻烦,所以采取比较猥琐的方式

例如:如果想要发送这样一个请求

http://localhost/mobile/getInfo.json?url=http://localhost2/mobile/getSomething.json?params=测试

前台Javascript:

var urlEncoded = Base64.encode(encodeURI(url));
//用base64来编码,encodeURI也将中文字符和其他一些字符给一并处理了
//Then, ...使用Ajax发送请求

    这里用到了一个Base64 Javascript库,地址:https://github.com/dankogai/js-base64

   

Java端的话,使用base64解码之后就得到了encodeURI之后的URI了,直接使用HTTPClient来发送请求

 

import org.apache.commons.codec.binary.Base64;
//推荐使用commons-codec包,不要使用sun.misc.base64decoder

String urlRaw = request.getParameter("url");
String url = new String(Base64.decodeBase64(urlRaw.getBytes()));

//Then, 就可以使用HTTPClient来请求数据
//....

你可能感兴趣的:(字符串)