码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java中文与Base64互转(解决中文乱码的问题)


    最近线上出现一个问题,前后端交互时,某些情况下,会有中文乱码的问题。

    解决思路:

            1. 在后端先将中文转为 Base64 后再传递到前端(此中文在前端不做显示处理)。

            2. 前端将参数再传递回后端时,后端解析 Base64 得到中文字符串。

    1. package gov.zhbs.utils;
    2. import org.apache.axiom.util.base64.Base64Utils;
    3. import org.apache.commons.lang3.StringUtils;
    4. import org.slf4j.Logger;
    5. import org.slf4j.LoggerFactory;
    6. import java.nio.charset.StandardCharsets;
    7. import java.util.regex.Pattern;
    8. /**
    9. *

    10. *
    11. *

    12. *

    13. * Copyright:.All rights reserved.
    14. *

    15. *

    16. * Company:Zsoft
    17. *

    18. *

    19. * CreateDate: 2022-08-16
    20. *

    21. *
    22. * @author YuGongWen
    23. * @history Mender: YuGongWen;Date: 2022-08-16;
    24. */
    25. public class MyBase64Utils {
    26. private static Logger logger = LoggerFactory.getLogger(MyBase64Utils.class);
    27. /**
    28. * 获取字符串的 Base64 字符串
    29. *
    30. * @param inputStr
    31. * @return
    32. */
    33. public static String getBase64Str(String inputStr) {
    34. if (StringUtils.isBlank(inputStr)) {
    35. return inputStr;
    36. }
    37. String base64Str = Base64Utils.encode(inputStr.getBytes(StandardCharsets.UTF_8));
    38. return base64Str;
    39. }
    40. /**
    41. * 解码 Base64 字符串
    42. *
    43. * @param base64Str
    44. * @return
    45. */
    46. public static String getStrByBase64(String base64Str) {
    47. if (StringUtils.isBlank(base64Str)) {
    48. return base64Str;
    49. }
    50. if (MyBase64Utils.ifBase64Str(base64Str)) {
    51. // nothing to do
    52. } else {
    53. // 非 Base64 格式,不做处理,直接返回
    54. return base64Str;
    55. }
    56. byte[] decode = Base64Utils.decode(base64Str);
    57. return new String(decode, StandardCharsets.UTF_8);
    58. }
    59. /**
    60. * 判断字符串是否为 Base64 格式
    61. *
    62. * @param str
    63. * @return
    64. */
    65. public static boolean ifBase64Str(String str) {
    66. if (StringUtils.isBlank(str)) {
    67. return false;
    68. }
    69. String pattern = "^([A-Za-z0-9+/])*([A-Za-z0-9+/]|[A-Za-z0-9+/]=|[A-Za-z0-9+/])$";
    70. if (Pattern.matches(pattern, str)) {
    71. return true;
    72. } else {
    73. return false;
    74. }
    75. }
    76. }

  • 相关阅读:
    缓存穿透--一起学习吧之架构
    AI图书推荐:AI驱动的图书写作工作流—从想法构思到变现
    LVS 负载均衡集群
    一文搞懂Docker
    【华为机试真题 JAVA】事件推送-100
    RISC-V架构——物理内存属性和物理内存保护
    hcie数通和云计算选哪个好?
    【RocketMQ中延时消息的生产与消费、批量消息的生产与消费、消息的过滤、消息的Tag过滤和SQL过滤、SQL过滤解决SQL92问题,代码样例实战】
    Ubuntu18.04安装Moveit框架
    LeetCode——622.设计循环队列
  • 原文地址:https://blog.csdn.net/qq_29062045/article/details/126363937
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号