タツノオトシゴのブログ

主にJavaに関するものです。

SceneBuilder 10で日本語が文字化けする事象の修正方法

SceneBuilderのインストーラ形式を入れて、起動するとメニューなどが文字化けする。

対処方法として知られているのが、メニューを英語で表示し対応するというもの。
qiita.com

だけど、やっぱし、日本語を正しく表示したい。ということで、調査結果とその対応方法を紹介します。 

【文字化けしたメニュー】
f:id:tatsu-no-toshigo:20181031220619p:plain

なぜ文字化けするのか?

まず、SceneBuilder本体のjarの中身を見てみます。

「<インストールフォルダ>\SceneBuilder\app\dist.jar」 が本体です。

jarを解凍してできた中身の「com/oracle/javafx/scenebuilder/app/i18n/SceneBuilderApp_ja.properties」が画面などのプロパティファイルになります。
マルチバイトはASCIIコードに変換されているので当然だよね。

# -----------------------------------------------------------------------------
# Generic labels
# -----------------------------------------------------------------------------
label.ok = OK
label.cancel = \u00e5\ufffd\u2013\u00e6\u00b6\u02c6
label.close = \u00e9\u2013\u2030\u00e3\ufffd\u02dc\u00e3\u201a\u2039
label.delete = \u00e5\u2030\u0160\u00e9\u2122\u00a4
label.copy = \u00e3\u201a\u00b3\u00e3\u0192\u201d\u00e3\u0192\u00bc


と思い、プロパティエディタで開いてみると、文字化けしていた。これが原因ですね。
 f:id:tatsu-no-toshigo:20181031222621p:plain

 

修正方法

元のファイルをリポジトリからとってきてとか面倒なので、「Executable Jar」版からプロパティファイルを抽出し、入れ変えて試します。

1. まず、Executable Jarである「scenebuilder-10.0.0-all.jar」をSceneBuilderのサイトからダウンロードしてきます。

gluonhq.com

2.ダウンロードしてきたファイル「scenebuilder-10.0.0-all.jar」を、SceneBuilderのインストールしたフォルダの「SceneBuilder/app/dist.jar」と同じディレクトリに配置します。

3. コマンドプロンプトで以下を実行し、jarからプロパティファイルを抽出し、dist.jarに取り込みます。

dist.jarが存在するフォルダに移動します。(環境によって異なります)

> C:\Java\SceneBuilder\app

dist.jarをコピーして、バックアップします。

> copy dist.jar dist.jar.org

scenebuilder-10.0.0-all.jarから、プロパティファイル「SceneBuilderApp_ja.properties」を抽出します。

> jar xvf scenebuilder-10.0.0-all.jar com/oracle/javafx/scenebuilder/app/i18n/SceneBuilderApp_ja.properties

抽出したプロパティファイル「SceneBuilderApp_ja.properties」をdist.jarに取り込みます。

> jar uf dist.jar com/oracle/javafx/scenebuilder/app/i18n/SceneBuilderApp_ja.properties

さあ、これでSceneBuilderを起動してみましょう。
f:id:tatsu-no-toshigo:20181031224123p:plain

メニューなどが正しく日本語で表示されましたね。

さあ、良いJavaFXライフを!!

何故こんなことが起こったのか!?

ビルド環境がおかしいとしか言いようがないですね。
予想ですが、元々、ファイルをUTF-8で管理しており、それをnative2asciiで変換するときに、Shift_JISで読み込んで変換してしまったと考えられます。

というのは、SDKのプロパティファイル「SceneBuilderKit_ja.properties」はUTF-8の日本語だからです。
でもこちらは文字化けしていない。

あと、中国語のプロパティファイル「SceneBuilderApp_zh_CN.properties」もあるのですが、こちらは何故か文字化けしていませんでした。

補足「Javaをインストールしていない場合」

1. jarファイルは、zipなので拡張子を変えてWindowsエクスプローラで直接入れ替えることもできます。

2 EclipsePleiadesがある場合は、Javaのフォルダにパスを通します。

set JAVA_HOME=C:\pleiades-2018-09\java\8
set PATH=%PATH%;%JAVA_HOME%\bin