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

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

一.问题分析

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

public static voidmain(String[] args) {

printEnv();//读取excel

ExcelUtil.simpleRead(Constant.EXCEL_PATH, AddedTax.class, 0, newAddedTaxListenner());

}private static voidprintEnv(){//获取环境变量

Map 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-8jvm---key是: java.specification.version ; jvm---value是: 1.8jvm---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.0jvm---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包的打印结果:

如上图所示:

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

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

-Dfile.encoding 解释:

在命令行中输入 java,在给出的提示中会出现 -D 的说明:

-D= # 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

三.解决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 窗口仍然不能正确显示汉字。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值