解决java在idea运行正常,但是打成jar包后中文乱码问题

这篇具有很好参考价值的文章主要介绍了解决java在idea运行正常,但是打成jar包后中文乱码问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

比如: 打包命令使用utf-8编码:


1.当在idea中编写的程序,运行一切正常.但是当被打成jar包时,执行的程序会中文乱码.产生问题的原因和解决方案是什么呢?

一.问题分析
分别使用idea和jar包形式打印出System中所有的jvm参数---代码如下:

public static void main(String[] args) {

        printEnv();

        //读取excel
        ExcelUtil.simpleRead(Constant.EXCEL_PATH, AddedTax.class, 0, new AddedTaxListenner());

    }


    private static void printEnv(){
        //获取环境变量
        Map<String, String> envs = System.getenv();
        envs.forEach( (key,value) ->{
            //System.out.println("env---key是: "+key +" ; "+"env---value是: "+ value);
        });

        //获取jvm属性
        Properties properties = System.getProperties();
        properties.forEach((key, value) -> {
            System.out.println("jvm---key是: "+key +" ; "+"jvm---value是: "+ value);
        });


    }


 
 

idea的打印结果:

jvm---key是: user.name ; jvm---value是: ZHULIBIN10
jvm---key是: file.encoding ; jvm---value是: UTF-8
jvm---key是: java.specification.version ; jvm---value是: 1.8
jvm---key是: java.awt.printerjob ; jvm---value是: sun.awt.windows.WPrinterJob
jvm---key是: user.timezone ; jvm---value是: Asia/Shanghai
jvm---key是: user.home ; jvm---value是: C:\Users\zhulibin10
jvm---key是: os.version ; jvm---value是: 10.0
jvm---key是: sun.management.compiler ; jvm---value是: HotSpot 64-Bit Tiered Compilers
jvm---key是: java.specification.name ; jvm---value是: Java Platform API Specification
jvm---key是: java.class.version ; jvm---value是: 52.0

jar包的打印结果:

解决java在idea运行正常,但是打成jar包后中文乱码问题

 如上图所示:

 问题就在这里,当使用idea时候,file.encoding的值是UTF-8; 使用jar包运行则file.encoding的值是GBK,这是导致乱码的直接原因.

java 乱码问题解决: -Dfile.encoding=UTF-8
 

-Dfile.encoding 解释:
在命令行中输入 java,在给出的提示中会出现 -D 的说明:
-D<name>=<value> # set a system property
-D 后面需要跟一个键值对,作用是设置一项系统属性
对 -Dfile.encoding=UTF-8 来说就是设置系统属性 file.encoding 为 UTF-8
那么 file.encoding 什么意思?字面意思为文件编码。
搜索 java 源码,只能找到 4 个文件中包含 file.encoding 的文件,
也就是说,只有四个文件调用了 file.encoding 这个属性。
在 java.nio.charset 包中的 Charset.java 中,这段话的意思说的很明确了。
简单说就是默认字符集是在 java 虚拟机启动时决定的,
依赖于 java 虚拟机所在的操作系统的区域以及字符集。
代码中可以看到,默认字符集就是从 file.encoding 这个属性中获取的。

二.问题解决总结:

 不管在任何平台,启动jar包的方式: java -jar  -Dfile.encoding=utf-8 YourName.jar

比如: 打包命令使用utf-8编码:

java -jar  -Dfile.encoding=utf-8 项目包名字.jar


三.解决cmd格式下输出乱码:
可写一个启动bat,将start.bat改为java -jar  -Dfile.encoding=utf-8 YourName.jar,问题就可以轻松解决。

如果还未解决,请修改cmd程序的编码注册表信息:

对于编译出的程序,在 cmd 和 power shell 运行时都不能正确显示汉字。 
网上查,可以再命令窗口修改: 
1、打开CMD.exe命令行窗口 
2、通过 chcp命令改变代码页,UTF-8的代码页为65001 
chcp 65001 
执行该操作后,代码页就被变成UTF-8了。
在当前窗口的确可以解决问题,但是重新打开的cmd窗口或者power shell 窗口仍然不能正确显示汉字。

————————————————
版权声明:本文为CSDN博主「魔都Thomas」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42058242/article/details/114933003 文章来源地址https://www.toymoban.com/news/detail-445526.html

到了这里,关于解决java在idea运行正常,但是打成jar包后中文乱码问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 打成jar包后如何获取jar包Resouces下的文件

    获取resouces下的文件使用以下代码即可读取,如果需要变成file传入其他的方法中,需要创建临时文件将输入流文件 复制到 临时文件中,并传入相关方法,最后删除临时文件即可。不能通过ClassPathResouce对象直接获取 文件File

    2024年02月19日
    浏览(38)
  • 在IDEA上运行成功,打包成jar包后,运行报错,程序自动退出

            java环境不正确,很有可能安装了多个环境,导致程序加载了错误程序。         尝试修改环境变量,如果不行,建议删除掉多余的java环境。          注意:删除掉多余的Java环境需要用程序删除,直接删除文件,容易删不干净。如下图,可以打开程序与功能删除

    2024年01月20日
    浏览(36)
  • SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问

    使用springboot开发一个项目,开发文件上传的时候,通常会将上传的文件存储到资源目录下的static里面,然后在本地测试上传文件功能没有问题,但是将项目打成jar包放到服务器上运行的时候就会报错,找不到对应目录。或者可以将上传文件存储到和jar包同级的目录下,但是无

    2024年02月12日
    浏览(57)
  • 系列二十九、Spring Boot打成jar包后,resources目录下的资源文件获取不到

            在做公司业务开发时,有一个地方是使用EasyExcel模板技术进行文件上传,测试环境是OK的,但是和前后端联调验证测试通过后,上传到生产环境就不行了,后来也是花费了很多时间才找出其中的问题,以下为解决方案。  

    2024年02月02日
    浏览(49)
  • IDEA打成JAR包

    一、场景需求 ​ 当我们需要将Java项目文件转为exe文件时,需要首先将Java项目文件打包成jar文件。这里我们以常用的Java开发IDE-IDEA为例,讲解打包jar文件的具体步骤。 二、具体步骤 在项目代码功能都测试无误后,接下来进行工程文件的打包。 菜单栏点击File后,选择Project

    2024年02月16日
    浏览(52)
  • vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常[已解决]

    vue3在运行时路由可以正常跳转,但是页面空白,刷新页面恢复正常,在网上寻找很久说是keepAlive的原因,后来看了看我的代码~ 原来的代码: 改后的代码: 由此可见,根元素一定要由一个div去包裹住! template必须有且只能有一个div 在这样才会正常显示~ 原理: 这里我们要先

    2023年04月27日
    浏览(53)
  • Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)

    文章概览: 本文将解决一下问题: 问题有先后顺序 Tomcat未配置环境变量 IIs访问权限问题 端口占用问题 文件缺少问题(tomcat可以正常运行但是报错404) 正确的运行框: 正确的网页: 首先你要报个404玩玩; 这里怎么解决呢,将分为一下几类: 根据这个问题可以参考作者之

    2024年02月03日
    浏览(45)
  • idea把项目打成jar包步骤详解

            最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成jar提供出去,今天弄完了,决定把这个步骤记录下来,便于以后轻车熟路。         打成jar要有mian方法的入口,所以我们在代码中需要定义一个main方法,然后通过这个main方法调用我们的核心逻

    2024年02月08日
    浏览(49)
  • idea正常安装后,运行按钮为灰色解决方法尝试

       如图,问题为idea刚安装好为右上角的运行按钮为灰色,博主在经过搜索以及询问同学之后大概明白问题的原因 找不到要运行的函数 1导入文件后选中要运行的文件,如下图左侧所示(该图片为正常情况,所以运行按钮为绿色)  2发现运行按钮为灰色,这时找到选中文件中

    2024年02月12日
    浏览(62)
  • Java运行时jar时终端输出的中文日志是乱码

    运行Jar时在控制台输出的中文日志全是乱码,这是因为cmd/bash默认的编码是GBK,只要把cmd的编码改成UTF-8即可  两种方式修改:临时修改和注册表永久修改 只对当前的cmd页面有效,关闭后重新打开都会恢复成GBK, 打开cmd,输入以下命令 这样既可以更改cmd的编码为UTF-8了。 以下

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包