java 后端 请求兑现 request 中的中文乱码问题处理

处理方案

工作中遇到了请求对象中的属性出现中文乱码的问题,最初想到的处理方案就是尝试将乱码字符串进行解码,尝试过了很多解码方式,然而结果并不理想,做好的结果解释解决了一部分乱码的问题。。。。

        
        String str1="娴嬭瘯";
        System.out.println(new String(str1.getBytes("gbk")));

        String str2="鐧诲綍鍚�";
        System.out.println(new String(str2.getBytes("gbk")));

结果如下:
在这里插入图片描述

正常情况下我们所期望的结果时,(测试、登录名)

  • 可以很明显的看出,但字符数为偶数个的时候还好,但是当字符为奇数的时候就会有问题。而且一般像那种乱码中带了?类似的奇怪符号的根本无法再解出来。
  • 想到了奇数和偶数字符编码的问题,有些处理乱码经验的程序员可以想到gbk和ut8的编码转换问题。

1.简单的推理

我们来复现一下,代码如下:

      String str2="登录名";
      System.out.println(new String(str2.getBytes("utf-8"),"gbk"));

结果如下:

在这里插入图片描述

看,这不就是我们之前用gbk解码之前的乱码字符串吗,很容易得出结论,和我们后台交互的服务的编码时utf-8,但是我们默认使用的解码规则时gbk。。。。。

至于为什么gbk和utf-8都有中文编码,但是互转会乱码以及奇数和偶数乱码的问题,我就不再赘述了,可以参考如下文章
gbk和utf-8转换乱码问题解析

2.解决,

既然已经找到问题的所在了,现在要着手解决问题了,后端项目用的springboot,设置了编码的utf-8,所以tomcat的编码应该也没有问题,业务代码中也没有编码的修改,那么就可能时过滤器或者这边的拦截器有问题,突然想起来之前项目对接了一个认证平台,加入了第三方提供的一个过滤器,可能他们提供的过滤器编码有问题,查看过滤器的配置,发现没有编码的配置。em~,可能他们提供的过滤器有默认编码。。。

好家伙,对着新加入的过滤器一阵翻找,还真发现了他编码相关的参数,好吧,他什么都没有
在这里插入图片描述
这个时候就想办法给他设置一下编码,再过滤器中设置对应的编码

        Map<String, String> initParameters = new HashMap<String, String>();
        initParameters.put("encoding", "utf-8");
        filter.setInitParameters(initParameters);

设置编码之后,之前中文乱码的问题处理好了。

3.提示

这只是适合我遇到问题的处理场景,编码的问题说简单也简单,说难也难,当生产环境出现了乱码的问题,没法复现和调试就更加恼火,这时候可以请求你的技术组长或者相关大佬,你踩过的坑说不定他们已经遇到过,这样能快速处理问题,避免继续卡住影响后续的工作;当然,时间足够的情况下可以深入研究,毕竟总有天赋异禀的人能第一个吃螃蟹。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值