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

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

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

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

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

 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版本,您需要将输入编码指定为String(ugh)。 可能的编码列表取决于JVM,但每个JVM至少保证:

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

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

以下是NetBeans的示例。

转到项目>>属性>>运行>> VM选项并键入-Dfile. encoding=UTF-8 -Dfile. encoding=UTF-8

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

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

在此处输入图像描述