【发布时间】:2019-02-11 11:58:40
【问题描述】:
我有一个用 JAVA 编写的将一些希伯来字母和一些数字写入文件的小程序。 当我从 Eclipse 运行程序时,希伯来语写得很好,但是如果我将它导出到一个可执行的 JAR 文件并从那里运行它,希伯来语就会变成乱码
我的代码:
if (content.length() > 0) {
FileWriter fileWriter = new FileWriter(path);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(content);
bufferedWriter.close();
}
我也尝试过使用 OutputStreamWriter 自己设置编码:
if (content.length() > 0) {
BufferedWriter bufferedWriter = new BufferedWriter
(new OutputStreamWriter(new FileOutputStream(path), "windows-1255"));
bufferedWriter.write(content);
bufferedWriter.close();
}
我尝试过的编码:
- ISO-8859-8
- windows-1255
- x-IBM856
- IBM862
- IBM424
- UTF-8
当我从 Eclipse 运行程序时,其中一些会返回正确的希伯来语,但从 JAR 文件运行时,它们都会将希伯来语变成不同类型的乱码。 我什至不确定代码本身的编码是问题还是解决方法。
我在 Windows 10 上使用批处理文件运行 JAR。 我的 java 版本信息:
- java版本“10.0.1”2018-04-17
- Java(TM) SE 运行时环境 18.3(内部版本 10.0.1+10)
- Java HotSpot(TM) 64 位服务器 VM 18.3(内部版本 10.0.1+10,混合模式)
使用 UTF-8 时的输出示例
希伯来文文件中的一行(由 eclipse 生成):
210001 188 13 04/09/1804/09/18 50.00 1 123456789 לירון קטלן הרא"ה 291 רמת גן 6013
乱码文件中的同一行(从 JAR 生成):
210001 188 13 04/09/1804/09/18 50.00 1 123456789 לירון קטלן הר�"ה 291 רמת גן 6013
不要介意多余的空格,它们应该在那里。
【问题讨论】:
-
为什么不使用 UTF-8?据我了解,它应该支持希伯来语脚本
-
UTF-8 是当今更多机器上的标准。
-
也试过 UTF-8,从 eclipse 运行时它可以工作,但从 JAR 运行时会出现乱码(与 windows-1255 相同),更新了问题
-
顺便说一句,这可能不会导致您的问题,但关闭 BufferedWriter 不会刷新或关闭底层编写器。您需要显式刷新或关闭底层编写器以使其刷新。我不确定为什么你甚至需要一个 BW,因为无论如何你都要在写入后立即关闭流。
-
正如我在问题中提到和编辑的,我尝试使用 UTF-8。如果我从 Eclipse 运行程序,它会编写正确的希伯来语,只有当我将它作为 JAR 文件运行时,它才会变为 gibrish。