java -jar启动参数里设置file.encoding编码,解决中文乱码的一堆坑

24 篇文章 3 订阅

最终解决办法:java -Dfile.encoding=utf-8 -jar xxx.jar
以下是本人的一些废话,为记录点滴~

起因:公司需要基于Jenkins平台上,进行一个批量构建的项目开发,就是个一次性可以调起多个项目的构建,
额,先说点题外话,要永远都记得一点,客户都是懒得~

BUG:使用jenkins-client 请求http://jenkins服务器的域名/job/你的构建项目名/api/json接口获取数据(该接口可以获取某个项目的大部分信息),但坑人的是,本地运行不会乱码,丢到服务器上就尴尬的一批,看图

在这里插入图片描述

猫腻:
部署到服务器上,**控制台,日志文件,页面上的中文都没有乱码, 直接用浏览器访问上述的jenkins api 接口 也显示正常 ,唯独就是代码里jenkins api 返回的数据有乱码 ** 真的忧桑啊啊啊啊

猜想:
是不是对代码里对reponse 的处理出了问题。额,,果然好像是的,
在这里插入图片描述
在这里插入图片描述
后台查出来 本地 的 Charset.defaultCharset() 返回的是 UTF-8 , 而服务器的是GBK简体中文 ,
想哭啊~ 百度了一波 ,查出这个返回值取决于系统的编码环境。

解决思路:
**改服务器的编码环境啦啦啦。 **

尝试解决:
(1)设置了JAVA_TOOL_OPTIONS 系统环境变量
在这里插入图片描述
启动项目,spring日志里会出现一行 PICK UP JAVA_TOOL_OPTIONS 。。。则说明生效了。
值得开心的是, 之前那个乱码问题 解决啦 ,解决啦,
值得忧桑的是,(1) 框架里的logback 里中文乱码了,心碎 ; (2)jenkins 打包项目 里,涉及到cmd 里的命令 , 参数传递 ,和 日志 输出 ,中文乱码了
看来这方法不靠谱,修改的应该是整个环境的编码,使用还是要慎重!!!
在这里插入图片描述
在这里插入图片描述

(2)最后查到修改某个项目的编码,注意是某个项目的运行环境,不是系统的环境,可以在启动参数的时候设定:java -Dfile.encoding=utf-8 -jar xxx.jar,获取api数据乱码的问题当然是解决了,可控制台的中文依旧乱码。。。
再解决问题:
logback.xml指定编码为GBK 。大胆猜想下,logback 在没有设置编码的情况下,默认应该是跟着当前jvm的编码走的,所以logback的编码也变成了UTF-8 ,而我系统的cmd窗口输出是接受的是中文(取决于系统的编码)。如下图所示:
在这里插入图片描述
最后把logback输出到控制台的编码改成中文的就解决。要将logback的编码和控制台的编码一致
在这里插入图片描述
就这样,最终的问题都解决了~~

最后还是有个疑问,解决控制台乱码,尝试着修改cmd窗口的的编码改为utf-8 (用chcp 65001 ) 和 该系统保持一致,logback.xml 改成utf-8 编码,并没啥用,,,,苦恼~
经过这次,个人觉得以后的logback.xml里最好明确下编码格式,和当前整个系统的编码一致,而不是简单的一个项目的运行环境编码。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值