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

这个问题别人也遇到过。

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. [Go] golang 两个数组 list 的合并方式

    s := append([]int{1, 2}, []int{3, 4}...) Tool:在线Golang代码运行 Cool:在线 AI 编程助手 https://stackoverflow.com ...

  2. k8s-1.28版本多master部署

    一.环境准备 k8s集群角色 IP 主机名 安装相关组件 kubernetes版本号 控制节点 192.168.10.20 master apiserver.controller-manager.sc ...

  3. 第一讲 Cadence-于真博士课程简介

    第一讲 Cadence-于真博士课程简介 以工程化的思想来学习本课程,比较有效,从一个DSP开发板设计为例开始,做出PCB板,顺带学会Cadence软件操作,而不是仅仅学习软件. 前期准备工作,阅读配 ...

  4. Codeforces Round 927 (Div. 3) EFG

    E:Link 题意:给定长度小于 \(4 \times 10^5\) 的整数 \(n\),求从 \(0\) 到 \(n\) 各数位变化次数之和. 如:\(n = 12345\) 个位变化 \(1234 ...

  5. 技术书籍 — EffectiveMordenCpp 研读

    一.类型推导 PROs: 源码某处的类型修改,可以自动传播其他地方 Cons: 会让代码更复杂(How?) 在模板类型推导时,有引用的实参会被视为无引用,他们的引用会被忽略 template<t ...

  6. 如何将 Win10 企业版转换为专业版

    有时候,我们需要将 Windows 10 企业版转换为专业版.这种情况可能发生在您购买了预装企业版的电脑,但实际上只需要专业版的功能.本文将介绍如何简单地将 Windows 10 企业版转换为专业版. ...

  7. ansible系列(33)--ansible实战之部署WEB集群架构(3)

    目录 1. 应用环境部署 1.1 nginx编译部署 1.2 PHP编译部署 1.3 mariadb二级制部署 1.4 redis部署 1.5 NFS部署 1.6 keepalived+LVS部署 1 ...

  8. 手机自适应的单位rem,与自适应网页的区别

    一个网站有的会分为pc站和移动站,有的网站只有pc站,而现在更多的是自适应的站点.现在针对自适应的网页设计有很多模板,如bootstrap,它会让你轻松定制一个只适应网站,而现在大多数的网站并不是靠程 ...

  9. 关于.net Core在华为云的鲲鹏服务器上部署的细节纪要

    由于鲲鹏使用的是ARM的cpu,,非x86的,我们公司买的是Centos,,由于需要在上面部署.net core 3.0/3.1的应用,,在按照官方的文章进行部署之后,会提示 FailFast: Co ...

  10. Authentication failed. Some common reasons include:

    问题无论是pull.clone还是push都报错 fatal: Out of memory, malloc failed (tried to allocate 301989888 bytes)fata ...