现在需求是在浏览器里面直接发请求,浏览器发请求,默认发的是get请求,然后带参数,参数包含中文汉字。麻烦就在这里,参数里面的汉字,在后台接收的时候,是乱码。
这么简单的传递参数的方式,是不OK的。
下面看详情。
这个就是简单的在URL里面带中文汉字参数,然后,就在后台乱码了,哦。这就悲剧啦。
1,有的人说:(结果:失败)
后台解码的时候,如下,
String setMetricText = URLDecoder.decode(setMetricValue, “UTF-8”);
这么滴可以解决问题,我就尝试一下,如下。
我这个处理方式呢,前台发送请求方式,还是跟上面那样,直接发请求,未对中文汉字参数做任何编码方面的修改。
结果,也就如上图那样,还是乱码。
2,有的说:(结果:失败)
在前台发请求的时候,给参数编码一下。后台再解码一下。
encodeURI(“geos汉字传递测试.xls”)
然后,把编码过的参数,给添加到URL里面去,如下
不信的你可以自己试验一把,把下面编码过的参数放到浏览器的URL里面,然后,一回车,就变成如上图的情况啦。
然后,后台还是乱码依旧。
尴尬啦。还是不OK。
3,有的说:(结果:失败------因为编发格式写反了,给修正一下这个就能用啦。)
后台解码姿势换了一种,
filePath = new String(filePath.getBytes(“utf-8”), “ISO-8859-1”);
后台这么干,前台直接发请求,不编码,试试。
结果如下:
还是乱码。不OK。
后来有人留言说我上面代码写反了,应该如下这么写,就好。
filePath = new String(filePath.getBytes(“ISO-8859-1”), “utf-8”);
结果还就真的成功了。
前端的请求不需要去两次编码,后段就可以直接拿到非乱码的值。OK
4,有的说:(结果:成功------对于特殊字符是不怎么支持的)
encodeURI(encodeURI(“geos汉字传递测试.xls”))
这么干,在前台发请求的时候,给中文汉字参数,来两次编码,如上,然后,后台不变。解码一次具体看截图。
哎,竟然OK啦。
good
但是,
哎,一遇到,但是,就是文章的转折点啦。要出现坑了,注意啦。
关于特殊字符的测试。
可以看到,也是经过了2此的编码,但是,到后台之后,发现,还是出现了部分偏差。
具体就看图中的偏差吧,反正是前后台不一致啦,这就是问题啦。
最后,
除非是要搞死人的需求,不然,不带这么玩的。因为这个2次转码,也不是百分百安全的。
所以,咱还是要么不带中文汉字参数,要么咱就换个请求方式吧。
简单的都不安全,这不跟hashmap和hashtable一个道理吗?
简单的,快捷的,他就线程不安全。
安全的,他实现就复杂。