0

使用 JavaFX 在 Netbeans 中处理一个简单的翻译器项目。从 Netbeans 运行它,它可以完美地编译和运行。没有渲染问题:

从 Netbeans 启动时的外观

但是当运行相同的可执行文件([project-folder]\dist\Translator.jar)时:

\dist\Translator.jar 中的 mojibake

莫吉贝克。([project-folder]\dist\run##########\Translator.jar) 同样的事情:

\dist\run中的mojibake##########\Translator.jar

文本可能在四个地方出现格式错误:将术语列表发送给翻译人员,翻译人员使用 Web 服务检索翻译 (1)。然后将这些缓存在文件 (2) 中,并由解析器 (3) 加载,从而使数据可用于在 JavaFX 窗口 (4) 中显示。我检查了这些文件,它们是有效的 UTF-8,解析器仅在加载现有文件时运行,新部署不会有任何文件。因此,我将其缩小到 JavaFX 窗口中的显示。

4

1 回答 1

0

很抱歉,我的问题不是很好,但我遇到过很多有类似问题的人,很难为我的具体情况隔离开来。

问题的症结在于,Netbeans 将自动执行所有使用 UTF-8 作为默认编码的 JVM 会话(据我所知)。通常这不是问题,但是当使用在 UTF-8 规范中利用有争议的代码点的语言时,这可能会保证 mojibake 将被任何使用 UTF-8 以外的编码的 JVM 吐出。这是其中的大多数,因为 JVM 规范说最佳实践是使用主机系统的编码,这通常不是 UTF-8。

Java编译器平台文件编码问题帮助我解决了这个问题。由于我无法访问我的代码将在其上运行的每个系统的 JVM 参数(这似乎不切实际),因此我个人选择了以下解决方案。

/**
 * Converts a string from the system default encoding into UTF-8.
 * This fixes rendering issues for UTF-8 characters where the default
 * encoding would yield mojibake.  Should be run against any Strings that
 * will be displayed to the end user directly that may contain UTF-8
 * characters.
 * 
 * @param string    The String to be re-encoded.
 * @return          the re-encoded string
 */
public static String convertToUTF8(String string){
    return new String(string.getBytes(Charset.defaultCharset()), Charset.forName("UTF-8"));
}

一个完成工作的简单小方法,根据需要调用。

于 2016-11-15T19:43:38.910 回答