如何强制 jar 使用(或运行 jar 的 jvm)utf-8 而不是系统的默认编码

2022-09-01 17:46:49

我的Windows的默认编码是GBK,而我的Eclipse完全是utf-8编码的。
因此,在我的Eclipse中运行良好的应用程序崩溃了,因为当作为jar文件导出时,单词变得不可读;
我必须在.bat文件中写入以下行才能运行应用程序

   start java -Dfile.encoding=utf-8 -jar xxx.jar    

现在我的问题是,我是否可以在源代码中编写一些东西来设置应用程序uses(或jvm运行)utf-8而不是系统的默认编码。


答案 1

打开文件进行读取时,需要显式指定要用于读取文件的编码:

Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8);

然后,默认平台编码的值(您可以使用)不再重要。-Dfile.encoding

注意:

我通常建议始终为依赖于标准区域设置的任何操作(如字符 I/O)显式指定编码。许多Java API方法默认为平台编码,我认为这是一个糟糕的设计,因为平台编码通常不是正确的,而且它可能会突然改变(如果用户例如切换操作系统区域设置),破坏你的应用程序。

因此,请始终说出您想要哪种编码。

在某些情况下,平台编码是正确的(例如,在打开用户刚刚为您创建的文件时),但它们相当罕见。

注2:

java.nio.charset.StandardCharsets在 Java 1.7 中引入。对于较旧的Java版本,您需要将输入编码指定为字符串(ugh)。可能的编码列表取决于 JVM,但每个 JVM 都保证至少具有:

US-ASCII, ISO-8859-1,UTF-8,UTF-16BE,UTF-16LE,UTF-16.


答案 2

还有另一种方法。如果您确定如何对输入和输出进行编码,则可以在编译jar文件之前保存设置。

下面是 NetBeans 的一个示例。

转到“项目>>属性”>>“运行>> VM 选项和类型-Dfile. encoding=UTF-8

之后,每次启动 Java VM 时,所有内容都会进行编码。UTF-8

(我认为Eclipse也提供了同样的可能性。如果没有,只需谷歌到VM选项。

enter image description here


推荐