Java PC 应用程序 - 导出的 JAR 不像在开发中那样运行

Java PC application - exported JAR do not behave as in development

我有一个经典的 Java PC 应用程序。构建的结果是一个 JAR 文件,它在 Windows 机器上 运行ning。

应用程序正在读取一些 XML 文件并最终创建一个 HTML 文档。 Xml 文件包含非英语的特定语言字符。

在开发过程中,在 IDE (Apache NetBeans 13) 中,构建 -> 运行 导出的 HTML 文件 包含 特定语言字符。

当我运行 JAR 文件时,从 Project -> dist 目录,HTML 包含特定语言字符。

例如:č、ć、đ、š 等字符被导出为:Ä�,而 运行从 NetBeans 中它们被导出为这样的字符,而不是那个奇怪的符号。 有问题的字母来自塞尔维亚语、克罗地亚语和波斯尼亚语。

当我从 NetBeans 导出项目时,我确保启用了这个选项: Project -> Project properties -> Build -> Packaging 其中选择了“Copy Dependent Libraries”选项。

此时我很疑惑。如果有人知道为什么某些东西在 IDE 中以一种方式工作,而在导出时以其他方式工作,请告诉我。

可能的问题是您的 HTML 文件需要将其 character encoding. Nowadays, generally best to use UTF-8 标识为大多数用途的编码。

确定文件的编码

如果您可以访问 Java 应用程序的源代码,请检查它以查看在生成 HTML 文件时使用的字符编码。但我假设你没有这样的访问权限。

打开 text-editor 中的 HTML 文件以检查其原始源代码。查看它是否指定了字符编码。如果是这样,并且字符编码指示符不正确,您将需要更改 HTML 文件。

如果 HTML 中未指明字符编码,您将需要通过试验来发现编码。在网络浏览器中打开 HTML 文件,然后使用大多数浏览器(Firefox、Safari、Edge 等)中可用的“视图”或开发人员工具在编码之间明确切换。

如果切换到特定编码导致文本按预期显示,那么您知道可能的编码。

指定文件的编码

在 HTML、HTML5, UTF-8 is the default encoding assumed by the web browser. But if the web browser switches into Quirks Mode 的现代版本中,浏览器可能采用另一种编码。为帮助避免 Quirks 模式,HTML5 文档应以 <!DOCTYPE html>.

开头

因此,最好明确说明编码。一旦确定 Java 应用程序使用的编码创建 HTML 文件,要么更改该应用程序(如果您有源代码)以编写编码指示符,要么编写另一个 Java 应用程序编辑生成的 HTML 文件以包含指标。如果您不是 Java 开发人员,您可以使用任何编程语言甚至 shell 脚本来编辑生成的 HTML 文件。

要指示 HTML5 文件的编码,请添加 meta element.

对于 UTF-8:

<meta charset="UTF-8">

对于Latin-1

<meta charset="ISO-8859-1">

如果您的 Java 应用程序是专门在 Microsoft Windows 上开发的,开发人员可能有意或无意地使用了 Microsoft 定义的字符编码之一。 Java 的旧版本默认使用特定于主机平台的字符编码 — 但请注意 Java 18+ 中的 default changes to UTF-8 跨平台。

了解更多信息

您可以在许多 处阅读有关这些问题的信息。喜欢 here and in Wikipedia.

如果您不了解字符集和字符编码,我强烈建议您阅读 Joel Spolsky 撰写的令人惊讶的有趣文章 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)