最终解决办法: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里最好明确下编码格式,和当前整个系统的编码一致,而不是简单的一个项目的运行环境编码。