【问题标题】:Java application renders Unicode characters well in eclipse, but not when exported as a runnable jar fileJava 应用程序在 Eclipse 中可以很好地呈现 Unicode 字符,但在导出为可运行的 jar 文件时却不行
【发布时间】:2014-09-25 15:09:35
【问题描述】:

我创建了一个显示一些 UTF-8 字符的 Java 应用程序(导出为 jar 文件)。

问题是,当我们在 Eclipse 中运行它时,它显示的字符正常。但是,当我们将其导出为可运行的 jar 文件并执行时,字符是锯齿状的。

可能是什么原因?我猜有些编译设置没有正确设置。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 您是否在控制台中打印此类字符?
  • @Claudio 感谢您的回复,克劳迪奥。不,我使用 java swing 对象 JEditorPane 来显示一些汉字。
  • 您的字符是 ASCII 转义的(“\u”后跟一个数字)还是直接将它们放入字符串文字中?
  • @Pawel 他们是直接放的。实际上我的应用程序是一个电子邮件客户端,JEditorPane 使用 HTMLEditorKit 显示一些 HTML 内容(电子邮件内容)。

标签: java eclipse unicode jar


【解决方案1】:

将您的字符写入 UTF-8 编码的文本文件。 在[JDK]/bin文件夹里面有一个叫native2ascii的工具,使用方法如下:

native2ascii -encoding utf8 input.txt output.txt

将转换结果复制回应用程序的代码中。

顺便说一句。将此类资源外部化是个好主意。

【讨论】:

  • 感谢 Pawel 的回复。但是,我在运行时将收件箱电子邮件内容中的 Unicode 字符动态放置,而不是在编译时静态放置。那么我该如何处理呢?
  • 对不起,我误会了你。尝试在从源读取的字符串上使用 ApacheCommons StringEscapeUtils.escapeJava()。或者,如果存在某种字符串byte[] 转换,请确保明确指定 UTF-8 编码。
  • 再次感谢您的建议 Pawel。好吧,我尝试了StringEscapeUtils,但还没有运气。不是正确显示字符,而是很有趣,而是显示像"\u517C" 这样的字符。我不知道您是否使用过 HTMLEditorKit。仅供参考,它显示 html 内容,就好像 JEditorPane(它应用于)是一个 html 查看器或其他东西。因此,所有标签都适用。我在想我可能必须从meta 标记更改charset=UTF-8 设置。
  • 好的,我过去曾在不同的情况下使用过这个工具,所以不能保证它会解决你的问题。顺便说一句,您可能希望使用免费的“unes​​capeJava”方法将字符串(以其原始形式)返回到输出。
  • 抱歉,还是没有运气。
【解决方案2】:

问题是,当我们在 Eclipse 中运行它时,它显示的字符正常。但是,当我们将其导出为可运行的 jar 文件并执行时,字符是锯齿状的。

我假设当您说“jagged”时,您使用的是具有正常英语含义的单词;即显示的字符可识别,但渲染粗糙难看。

如果是这样,那么问题出在渲染字符的字体上。如果您的 UI 由 Swing ... 呈现,这通常由“外观”(我认为)决定,如果您正在写入控制台,则通常由控制台程序决定。

我猜有些编译设置没有正确设置。

我怀疑它与编译器设置有关。

【讨论】:

  • 感谢斯蒂芬的回复。首先,我的意思是“锯齿状”没有正确显示字符,就像一些看起来很奇怪的字符一样。其次,我使用“Arial Unicode MS”作为所选字体。
猜你喜欢
  • 2015-08-03
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多