问题描述
在开发Java Web应用的时候,时不时会遇到http请求参数的乱码。这是因为请求参数中包含中文等特殊非ascii字符,并且客户端和服务器使用不同的编码方式来进行编解码造成的。
解决方案就是让服务器和客户端的编码方式一致。但有些时候当代码部署到不同的生成环境后,服务器的编码会出现不一样的情况,这样的话就可以做一些特殊处理。
客户端和服务器编码不一致时的解决办法:
我们可以通过在客户端双重编码加上服务器手动解码的方式来处理这种问题。具体请看下图:
具体代码片段如下:
- 客户端代码:
let url = "http://localhost:8080/app/admin/internal/api?name=张三&age=20";
let encodedUrl = encodeURI(encodeURI(downLoadUrl));
注意请求参数中的中文字符,这就是会出现乱码的点
- 服务器代码:
name = java.net.URLDecoder.decode(name, "utf-8");
总结
当然,这种方法只是临时使用,最好的解决方案就是让客户端和服务器的编解码方式一致。