25

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

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

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

4

2 回答 2

20

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

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。

于 2010-11-11T21:55:44.323 回答
-1

还有另一种方式。如果你确定你喜欢如何编码输入和输出,你可以在编译你的 jar 文件之前保存设置。

这是 NetBeans 的示例。

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

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

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

在此处输入图像描述

于 2018-01-15T08:25:37.207 回答