遇到一个比较奇怪的问题。

这个问题别人也遇到过。

https://blog.csdn.net/gao_chuan_g/article/details/115117712

一、情况简介

使用jdk17+springboot3.x+spring6.x写一个小应用A,其中有一部分代码是用于生成SM2加密后的字符串,这个字符串会再做一些处理,最终会显示在前端的页面。

为了便于行文,把这个字符串称为regtxt。regtxt大概是这样的:

其他的应用对regtxt解密为decRegTxt,再把decRegTxt反序列化为一个java对象t。

它本身有个”用户名称“的属性,通常是中文。

在开发环境下,A生成的字符串regtxt可以正确地被其他应用解密并反序列化,中文不乱码。

但是,当A打包部署运行的时候,结果发现是乱码的。

二、问题排查

发现问题后,马上就想到:是不是编译的时候不是用utf8。当然后面证明这个想法是非常愚蠢和错误的。

重写用uf8编译打包后,还是没有解决。

于是又想:应该是jvm的运行环境不是utf8导致的,那么如何修改jvm的编码?

找了一些资料,依稀想起有个-D的参数可以控制,又搜了下,确认了:-Dfile.encoding=UTF8

于是修改启动命令为: java -Dfile.encoding=UTF8 -jar reg.jar,结果是对的。

现在回过头来,可以分析出为什么是乱码了:

1.在应用A中由于是gbk编码,那么加密后自然就是gbk的加密结果

2.加密后的字符串(含GBK的加密结果)在UTF8环境下被还原,自然无法显示GBK编码,所以乱码了。

还有没有其它的解决方法了?使用代码强制转为utf8输出?这个也是可行的!不过这个需要修改sm2工具的方法,或者解密后再转为UTF8即可。

三、总结

1.基础知识还是不够牢靠,居然会怀疑java代码的编码问题

2.在jvm内部影响编码的主要方式:根据环境变量或者强制编码的方式来控制。当然其它方式也是可以控制的。

spring使用jdk17运行出现编码问题的更多相关文章

  1. Spring MVC的运行流程

    Spring MVC的运行流程 摘要:本文档主要结合官方给出的Spring MVC流程图结合一个简单的Spring MVC实例,分析并介绍了Spring MVC的运行流程. 目录 Spring MVC ...

  2. eclipse运行时编码设置

    eclipse运行时编码设置:

  3. C++运行字符编码于MSVC和GCC之间的区别

    详细请参考这篇博文 http://blog.csdn.net/dbzhang800/article/details/7540905 运行字符编码就是指,当你源代码写下const char* p = & ...

  4. SpringMVC系列(十四)Spring MVC的运行流程

    Spring MVC的运行流程图: 1.首先看能不能发送请求到Spring MVC的DispatcherServlet的url-pattern2.如果能发送请求,就看在Spring MVC中是否存在对 ...

  5. python运行显示编码错误

    python中运行显示编码错误一般有2种原因: 编码与译码的方式不一致 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII chara ...

  6. 〖Windows〗Linux的Qt程序源码转换至Windows平台运行,编码的解决

    在中国大陆,Windows默认的编码是gb2312,而Linux是UTF8: 多数情况下,把Linux上的程序转换至Windows上运行需要进行编码转换才能正常显示: 而其实大可以不必的,同样,文件使 ...

  7. 将Spring Boot项目运行在Docker上

    将Spring Boot项目运行在Docker上 一.使用Dockerfile构建Docker镜像 1.1Dockerfile常用指令 1.1.1ADD复制文件 1.1.2ARG设置构建参数 1.1. ...

  8. spring mvc jsp运行不起来的问题

    spring mvc已经处理成让jsp运行,即: <bean class="org.springframework.web.servlet.view.InternalResourceV ...

  9. 使用spring @Scheduled注解运行定时任务、

    曾经框架使用quartz框架运行定时调度问题. 老大说这配置太麻烦.每一个调度都须要多加在spring的配置中. 能不能降低配置的量从而提高开发效率. 近期看了看spring的 scheduled的使 ...

  10. PyCharm运行报编码错误

    运行报如下错误: SyntaxError: Non-ASCII character '\xe8' in file /home/ubuntu/code/201803091253-text.py on l ...

随机推荐

  1. 超级好用的 HBase GUI 工具分享

    超级好用的 HBase GUI 工具分享 你是否曾为 HBase 数据管理而苦恼?别担心,这一款超级好用的 HBase GUI (HBase Assistant)工具,让您在大数据世界中游刃有余.不再 ...

  2. K8s控制器---Statefulset(11)

    一.Statefulset概述 1.1 Statefulset控制器:概念和原理解读 StatefulSet 是为了管理有状态服务的问题而设计的 扩展: 有状态服务? StatefulSet 是有状态 ...

  3. STM32【HAL库】使用外部SRAM程序

    #include <board.h> #ifdef BSP_USING_SRAM #include <drv_common.h> #include <rtthread.h ...

  4. aspnetcore插件开发dll热加载

    该项目比较简单,只是单纯的把业务的dll模块和controller的dll做了一个动态的添加删除处理,目的就是插件开发.由于该项目过于简单,请勿吐槽.复杂的后续可以通过泛型的实体.dto等做业务和接口 ...

  5. C#开发的CPU使用率小应用 - 开源研究系列文章 - 个人小作品

    这次用C#编写一个CPU使用率的小应用.想了一下,大概需要两个内容:一个是获取CPU使用率:一个是托盘图标的动画效果.这两个内容在上次的博文中有介绍了,此博文为具体的应用的例子. 对于要实现的应用,首 ...

  6. 一图明白ACHI,SATA之间的关系

    从上图中可以看到,SATA与PCI-E不仅可以指代物理的接口,还可以指代物理接口使用的传输协议. M.2物理接口可以使用SATA.PCI-E传输协议. U.2可以使用PCI-E传输协议.在网上搜了一下 ...

  7. 移动端termux安装kali

    1.相关准备一部安卓手机,termux,NVAC,浏览器2.安装kali首先进入kali的官网选择文档找到Android手机上的kali找到NetHunter-Rootless找到kali安装命令:t ...

  8. 4G EPS 第四代移动通信系统

    目录 文章目录 目录 4G EPS 4G EPS 4G(the 4th generation mobile communication technology,第四代移动通信技术)提供了 3G 不能满足 ...

  9. java学习之旅(day.11)

    static详解 static若在类中使用,就是修饰成员变量 static若在方法中使用,就是成员方法? static加在方法上叫静态方法,加在属性上叫做静态属性 package com.zhang. ...

  10. Python作图三维等高面

    技术背景 对于等高线,大家都是比较熟悉的,因为日常生活中遇到的山体和水面,都可以用一系列的等高线描绘出来.而等高面,顾名思义,就是在三维空间"高度一致"的曲面.当然了,在二维平面上 ...