java windows 中文乱码问题_解决Java程序在windows bash中运行出现的乱码问题

问题描述:

8a1fb39dab8a39152fbc0983e28298f2.png

java程序打为jar包后,在UTF-8的bash中运行正常,但在GBK的bash运行出现乱码。

问题解决:

方法一、

java -Dfile.encoding="UTF-8" -jar IconMaker.jar

运行程序时,在bash中或sh文件中明确设置系统属性file.encoding为UTF-8。

这样就不受bash的默认字符集影响了。

方法二、

在系统中增加环境变量:

JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8

这样所有java运行都会加上这个参数。

原理:

-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 这个属性中获取的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值