当前位置: 代码网 > it编程>编程语言>Java > java后端请求兑现request的中文乱码问题解决

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

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

处理方案

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

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)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com