get请求URL传中文参数后台接收乱码的解决之道

现在需求是在浏览器里面直接发请求,浏览器发请求,默认发的是get请求,然后带参数,参数包含中文汉字。麻烦就在这里,参数里面的汉字,在后台接收的时候,是乱码。
这么简单的传递参数的方式,是不OK的。
下面看详情。

get请求URL传中文参数后台接收乱码的解决之道

这个就是简单的在URL里面带中文汉字参数,然后,就在后台乱码了,哦。这就悲剧啦。

1,有的人说:(结果:失败)

后台解码的时候,如下,
String setMetricText = URLDecoder.decode(setMetricValue, “UTF-8”);

这么滴可以解决问题,我就尝试一下,如下。

get请求URL传中文参数后台接收乱码的解决之道

我这个处理方式呢,前台发送请求方式,还是跟上面那样,直接发请求,未对中文汉字参数做任何编码方面的修改。

结果,也就如上图那样,还是乱码。

2,有的说:(结果:失败)

在前台发请求的时候,给参数编码一下。后台再解码一下。

encodeURI(“geos汉字传递测试.xls”)

然后,把编码过的参数,给添加到URL里面去,如下

get请求URL传中文参数后台接收乱码的解决之道

不信的你可以自己试验一把,把下面编码过的参数放到浏览器的URL里面,然后,一回车,就变成如上图的情况啦。

然后,后台还是乱码依旧。

尴尬啦。还是不OK。

3,有的说:(结果:失败------因为编发格式写反了,给修正一下这个就能用啦。)

后台解码姿势换了一种,

filePath = new String(filePath.getBytes(“utf-8”), “ISO-8859-1”);

后台这么干,前台直接发请求,不编码,试试。

结果如下:

get请求URL传中文参数后台接收乱码的解决之道

还是乱码。不OK。

后来有人留言说我上面代码写反了,应该如下这么写,就好。

filePath = new String(filePath.getBytes(“ISO-8859-1”), “utf-8”);

结果还就真的成功了。

get请求URL传中文参数后台接收乱码的解决之道

get请求URL传中文参数后台接收乱码的解决之道
get请求URL传中文参数后台接收乱码的解决之道

前端的请求不需要去两次编码,后段就可以直接拿到非乱码的值。OK

4,有的说:(结果:成功------对于特殊字符是不怎么支持的)

encodeURI(encodeURI(“geos汉字传递测试.xls”))

这么干,在前台发请求的时候,给中文汉字参数,来两次编码,如上,然后,后台不变解码一次具体看截图。

get请求URL传中文参数后台接收乱码的解决之道

哎,竟然OK啦。

good

但是,

哎,一遇到,但是,就是文章的转折点啦。要出现坑了,注意啦。

关于特殊字符的测试。
get请求URL传中文参数后台接收乱码的解决之道

可以看到,也是经过了2此的编码,但是,到后台之后,发现,还是出现了部分偏差。

具体就看图中的偏差吧,反正是前后台不一致啦,这就是问题啦。

最后,

除非是要搞死人的需求,不然,不带这么玩的。因为这个2次转码,也不是百分百安全的

所以,咱还是要么不带中文汉字参数,要么咱就换个请求方式吧。

简单的都不安全,这不跟hashmap和hashtable一个道理吗?

简单的,快捷的,他就线程不安全。

安全的,他实现就复杂。

上一篇:SparkSQL 访问 Mysql


下一篇:javascript – 可观察属性更改时的Angular2触发器函数