解决前台请求后台乱码的问题

一:GET 请求乱码
造成原因
  • 浏览器请求文字编码和页面编码保持一致,页面编码一般都是 UTF-8 ,GET 方式也是使用 UTF-8,Tomcat 接收请求没有设置编码默认使用 ISO-8859-1,传入中文参数后台接收自然乱码
方案一

ISO-8859-1 是单字节编码,可以用 new String 的方式转换

String value = request.getParameter("name");
value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
方案二(Tomcat)
可以在 server.xml 文件指定编码
将 Connector connectionTimeout=“20000” port=“8080” protocol=“HTTP/1.1” redirectPort=“8443”
修改成 Connector connectionTimeout=“20000” port=“8080” protocol=“HTTP/1.1” redirectPort=“8443” URIEncoding=“UTF-8”
使用这种方式带来的问题是在你本地上这么做没有问题,你无论怎么去修改你tomcat上的配置都没问题,但是测试环境和生产环境的服务器不是说改就能改的,特别是有些公司的服务器是租赁的,那么在我们不知道测试环境和生产环境服务器配置的时候就要使用以下的方法来解决 GET 请求的中文乱码问题。
方案三
前台对字符进行编码
var value = encodeURI(encodeURI(“xxx”))
后台对字符进行解码
String xxx = URLDecoder.decode(request.getParameter(“xxx”), “UTF-8”);
因为 GET 请求的参数在请求行上,我们不能像解决 POST 一样使用 request.setCharacterEncoding(“UTF-8”),这种方式是修改方法体的编码方式,所以需要前台编码、后台解码的工作。
这里前台需要编码两次,因为第一次编码,生成了含有 % 开头的字符,在浏览器里面 % 是一个转义字符,浏览器提交到服务器时会将这一串编码后的字符 % 与 % 之间的编码,两位两位取出后进行解码,然后再传递给处理页面,所以编码一次不够,编码两次以后后台拿到的才是正确的字符,才能进行解码的操作!
二:POST 请求乱码:使用过滤器即可解决
三:log4j 在 Linux 下显示乱码解决方法:log4j 配置文件中加一句话即可解决:log4j.appender.logfile.encoding=UTF-8
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值