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.提示
这只是适合我遇到问题的处理场景,编码的问题说简单也简单,说难也难,当生产环境出现了乱码的问题,没法复现和调试就更加恼火,这时候可以请求你的技术组长或者相关大佬,你踩过的坑说不定他们已经遇到过,这样能快速处理问题,避免继续卡住影响后续的工作;当然,时间足够的情况下可以深入研究,毕竟总有天赋异禀的人能第一个吃螃蟹。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
关于使用Mybatisplus自带的selectById和insert方法时的一些问题
这篇文章主要介绍了关于使用Mybatisplus自带的selectById和insert方法时的一些问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
java中常用的json,jsonarray,map数据结构与对象互转详解
这篇文章主要为大家详细介绍了java中常用的json,jsonarray,map数据结构与对象互转的相关方法,主要是FastJSON和Jackson两种常用库,有需要的小伙伴可以了解下2025-12-12
java String、StringBuilder和StringBuffer的区别详解
这篇文章主要介绍了java String、StringBuilder和StringBuffer的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-01-01
Java利用Spire.XLS for Java实现自动化生成PDF文档
在 Java 后端高效灵活地实现 PDF 文档的生成,常常是困扰开发者的一个痛点,本文将为您介绍如何利用 Spire.XLS for Java 轻松驾驭 Java 中的 PDF 文档生成,感兴趣的小伙伴可以了解下2026-02-02
java用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间
这篇文章主要给大家介绍了关于java使用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下2023-08-08
SpringBoot中@Scheduled实现服务启动时执行一次
本文主要介绍了SpringBoot中@Scheduled实现服务启动时执行一次,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-08-08


最新评论