java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java -jar启动参数设置file.encoding编码,中文乱码

java -jar启动参数设置file.encoding编码,解决中文乱码的问题

作者:快乐妮子

这篇文章主要介绍了java -jar启动参数设置file.encoding编码,解决中文乱码的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

最终解决办法

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 。。。

则说明生效了。

值得开心的是, 之前那个乱码问题 解决啦 ,解决啦,值得忧桑的是,

看来这方法不靠谱,修改的应该是整个环境的编码,使用还是要慎重!!!

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文