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

 更新时间:2023年07月20日 17:12:21   作者:快乐妮子  
这篇文章主要介绍了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 。。。

则说明生效了。

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

  • 框架里的logback 里中文乱码了,心碎 ;
  • 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里最好明确下编码格式,和当前整个系统的编码一致,而不是简单的一个项目的运行环境编码。

总结

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

相关文章

  • Spring前后端跨域请求设置代码实例

    Spring前后端跨域请求设置代码实例

    这篇文章主要介绍了Spring前后端跨域请求设置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java 客户端向服务端上传mp3文件数据的实例代码

    Java 客户端向服务端上传mp3文件数据的实例代码

    这篇文章主要介绍了Java 客户端向服务端上传mp3文件数据的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • maven加入spring框架的详细教程

    maven加入spring框架的详细教程

    这篇文章主要介绍了maven加入spring框架的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • SpringBoot实现redis延迟队列的示例代码

    SpringBoot实现redis延迟队列的示例代码

    延时队列场景在我们日常业务开发中经常遇到,它是一种特殊类型的消息队列,本文就来介绍一下SpringBoot实现redis延迟队列的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 浅谈java8中map的新方法--replace

    浅谈java8中map的新方法--replace

    下面小编就为大家带来一篇浅谈java8中map的新方法--replace。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • SpringBoot解决循环调用问题

    SpringBoot解决循环调用问题

    作者在将SpringBoot从1.5版本升级至2.6版本,并迁移至阿里云上运行后,遇到了循环调用问题,在Jetty容器中运行没问题,但在Tomcat容器中就出现了循环引用问题,原因是SpringBoot 2.6不鼓励循环引用,暴露出该问题,作者提供了两种解决思路
    2024-10-10
  • SpringBoot项目打jar包与war包的详细步骤

    SpringBoot项目打jar包与war包的详细步骤

    SpringBoot和我们之前学习的web应用程序不一样,其本质上是一个 Java应用程序,那么又如何部署呢?这篇文章主要给大家介绍了关于SpringBoot项目打jar包与war包的详细步骤,需要的朋友可以参考下
    2023-02-02
  • Java 集合实现分页的方法(业务代码实现分页)

    Java 集合实现分页的方法(业务代码实现分页)

    在Java开发中,有些场景比较复杂,受限制,不好在sql查询层面实现分页,需要在查询的list结果后,将list分页返回,如何实现呢,带着这个问题一起通过本文学习吧
    2025-02-02
  • Springboot实现自定义错误页面的方法(错误处理机制)

    Springboot实现自定义错误页面的方法(错误处理机制)

    这篇文章主要介绍了Springboot实现自定义错误页面的方法(错误处理机制),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • java实现大文件导出的实现与优化

    java实现大文件导出的实现与优化

    这篇文章主要为大家详细介绍了java实现大文件导出的实现与优化的相关资料,文中的示例代码讲解详细,对我们深入了解java有一定的帮助,感兴趣的小伙伴可以了解下
    2023-11-11

最新评论