バグ #257
高橋 徹 さんが約3年前に更新
h4. 現象
Scene Builder 15.0.1 Windows版を、Windows 10 日本語版の上で実行すると、画面に表示される文字が化けてしまっている。
{{thumbnail(SceneBuilderScreen-1.jpg, 640)}}
h4. 再現手順
# Gluon社のScene Builder配布サイトから入手した Scene Builder 15.0.1 Windowsインストーラー版を日本語版Windowsにインストール
https://gluonhq.com/products/scene-builder/
# Scene Builderを実行
h4. 関連
* Scene Builder 10.0、11.0で発生した事象[#89]が解決されていない。
* scenebuilder の githubリポジトリのissue
https://github.com/gluonhq/scenebuilder/issues/194
h4. 調査結果
* Scene Builderのソースコードリポジトリ内では、日本語ロケールのリソースバンドル・プロパティファイル(SceneBuilderApp_ja.properties)は、ユニコードエスケープではなくUTF-8文字コードで日本語文字列が記述されている。[#257-3]
* 同ソースコードリポジトリ内では、デフォルトロケールと中国語ロケールのリソースバンドル・プロパティファイルはユニコードエスケープで記述されている[#257-3]
* 文字化け後の文字は、UTF-8日本語文字をSJIS(Windows-31j)と誤認して解釈したものとは異なるので、単純なエンコードまちがいではないと思われる[#257-5]
* Windows のロケールを日本語から英語に切り替えて、ビルドの実施をしたところ、Windowsインストーラー版に含まれる文字化けしたプロパティファイルが生成(再現)できた[#257-11]
h4. 文字化けの事象
UTF-8で記述された日本語ロケールの文字列リソース(プロパティファイル)を、Windows環境でのビルド時にUTF-8ではなくCP1252(ラテン文字)で解釈してしまい、誤ったユニコードエスケープを実施している。
UTF-8で記述した文字列「ファイル」がどのように変化するかを次の表に示す。
|1|ソース中の文字 |\3=. フ |\3=. ァ |\3=. イ |\3=. ル |
|2|UTF-8符号化 |=. e3 |=. 83 |=. 95 |=. e3 |=. 82 |=. a1 |=. e3 |=. 82 |=. a4 |=. e3 |=. 83 |=. ab |
|3|CP1252解釈 |=. ã |=. ƒ |=. • |=. ã |=. ‚ |=. ¡ |=. ã |=. ‚ |=. ¤ |=. ã |=. ƒ |=. « |
|4|ユニコードエスケープ |\u00e3|\u0192|\u2022|\u00e3|\u201a|\u00a1|\u00e3|\u201a|\u00a4|\u00e3|\u0192|\u00ab|
* プロパティファイル中にUTF-8エンコーディングで日本語文字を記述 (1), (2)
* gradle がプロパティファイルをWindows英語版のロケール(Cp1252)として解釈し(3)、ユニコードスケープを生成(4)
* (4)のユニコードエスケープを日本語ロケールで実行したScene Builderが画面に表示(結果、(3)の文字が表示)
h4. バグの解決案
想定した解決案を次に列挙。他にもあるかも
* Gradleがユニコードエスケープをしないようにビルド設定を修正する[#247-17] Gradleがユニコードエスケープをしないようにビルド設定を修正する
* Gradleが正しくユニコードエスケープをするようにビルド設定を修正する[#247-15]
* ソースリポジトリのプロパティファイルを、UTF-8ではなくユニコードエスケープ済みに修正する
検討 T.B.D.
戻る