java后端请求兑现request的中文乱码问题解决

 更新时间:2025年02月24日 09:41:44   作者:lijiabin417  
文章主要讲述了在处理处理方案工作中遇到中文乱码问题的解决过程,通过复现和分析乱码问题,发现是由于解码规则和后端服务编码不一致导致的,最终通过修改过滤器中的编码设置解决了问题

处理方案

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

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.提示

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JAVA实现将磁盘中所有空文件夹进行删除的代码

    JAVA实现将磁盘中所有空文件夹进行删除的代码

    这篇文章主要介绍了JAVA实现将磁盘中所有空文件夹进行删除的代码,需要的朋友可以参考下
    2017-06-06
  • Java聊天室之使用Socket实现通信功能

    Java聊天室之使用Socket实现通信功能

    这篇文章主要为大家详细介绍了Java简易聊天室之使用Socket实现通信功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • 详解java生成json字符串的方法

    详解java生成json字符串的方法

    本篇文章主要介绍了java生成json字符串的方法,包括map对象转换成json对象,list转换成json,json转换成list和map,有兴趣的可以了解一下。
    2017-01-01
  • spring retry 配置及使用教程

    spring retry 配置及使用教程

    这篇文章主要介绍了spring retry 配置及使用教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Redis介绍和使用场景详解

    Redis介绍和使用场景详解

    这篇文章主要为大家详细介绍了Redis介绍和使用场景,需要的朋友可以参考,具体内容如下
    2018-04-04
  • MyBatis学习教程(六)-调用存储过程

    MyBatis学习教程(六)-调用存储过程

    这篇文章主要介绍了MyBatis学习教程(六)-调用存储过程的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-05-05
  • ConcurrentHashMap线程安全及实现原理实例解析

    ConcurrentHashMap线程安全及实现原理实例解析

    这篇文章主要介绍了ConcurrentHashMap线程安全及实现原理实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java SHA-256加密的两种实现方法详解

    Java SHA-256加密的两种实现方法详解

    这篇文章主要介绍了Java SHA-256加密的两种实现方法,结合实例形式分析了java实现SHA-256加密的实现代码与相关注意事项,需要的朋友可以参考下
    2017-08-08
  • springboot2中HikariCP连接池的相关配置问题

    springboot2中HikariCP连接池的相关配置问题

    这篇文章主要介绍了springboot2中HikariCP连接池的相关配置问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • jedis的testWhileIdle用法源码解读

    jedis的testWhileIdle用法源码解读

    这篇文章主要为大家介绍了jedis的testWhileIdle用法源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论