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!)。
我有一个经典的 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!)。