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

这个问题别人也遇到过。

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. 本周ddl(4.1-4.5)

    本周ddl(4.1-4.5) cs61a首先完成2.23之前的任务 cs61a完成3.1之前的学习 cs61a完成3.8任务并且ants完成阶段1 csapp的bomblab 记录南京5个景点及其周边 ...

  2. WPF 使用 MAUI 的自绘制逻辑

    这是一个当前还没开发完成的功能,准确来说连预览版也算不上的功能.我原本以为 MAUI 是无法在 WPF 上面跑的,然而在看完了 MAUI 整个大的设计,才了解到,原来 MAUI 是一个非常庞大的开发项 ...

  3. go-admin 视频教程

    https://cloud.189.cn/t/6JJ3uqreqyai (访问码:2xn5) 感谢 熊猫 同学 整理 失效了可以去B站看 https://www.bilibili.com/video/ ...

  4. ansible系列(21)--ansible的变量注册Register

    1. 变量注册Register register 关键字可以将某个 task 任务结果存储至变量中,最后使用 debug模块 输出变量内容,可以用于后续排障: 示例一:register的基本使用: # ...

  5. Windows server 2012 R2开机进入cmd,关闭后黑屏

    出现此问题,一般只有两种情况,操作系统装置前和操作系统装置后出现: 第一种: 装置操作系统的时候没有选择"Windows Server 2012 R2 Strandard( 带有GUI的服务 ...

  6. 使用 Docker 部署 VS Code in The Browser

    1)介绍 GitHub:https://github.com/coder/code-server 在日常学习工作中,Vscode 已成为我们首选的代码编辑器.然而,其局限性在于当我们从家到公司移动时, ...

  7. Spring源码阅读 ------------------- SpringFrameWork 5.2 +IDEA 部署其他坑位问题(二)

    一.地址下jar包无法下载问题   报错信息:      Could not get resource 'https://plugins.gradle.org/m2/org/asciidoctor/o ...

  8. 异构数据源同步之数据同步 → datax 改造,有点意思

    开心一刻 去年在抖音里谈了个少妇,骗了我 9 万 后来我发现了,她怕我报警 她把她表妹介绍给我 然后她表妹又骗了我 7 万 DataX DataX 是什么,有什么用,怎么用 不做介绍,大家自行去官网( ...

  9. 一文搞懂docker容器基础:docker镜像管理,docker容器管理

    目录 一.系统环境 二.docker 2.1 Docker 概述 2.2 Docker 平台 2.3 我可以使用 Docker 做什么? 2.3.1 快速.一致地交付您的应用程序 2.3.2 响应式部 ...

  10. MyBatis两级缓存机制详解

    缓存是提高软硬件系统性能的一种重要手段:硬件层面,现代先进CPU有三级缓存,而MyBatis也提供了缓存机制,通过缓存机制可以大大提高我们查询性能. 一级缓存 ​ Mybatis对缓存提供支持,但是在 ...