バグ #257
高橋 徹 さんが約2年前に更新
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. バグの解決案
想定した解決案を次に列挙。他にもあるかも
* 案1) Gradleがユニコードエスケープをしないようにビルド設定を修正する[#247-17]
* 案2) Gradleが正しくユニコードエスケープをするようにビルド設定を修正する[#247-15]
* 案3) ソースリポジトリのプロパティファイルを、UTF-8ではなくユニコードエスケープ済みに修正する
案1は、別な問題が生じたため却下
案2は、OK
案3は、JDK 9以降から削除されてしまったnative2asciiコマンドが必要となるので、最後の手段としていた。案2がOKとなったので案3は未実施。
h4. Scene Builderへの修正案の提示(プルリクエスト)
* 本家Scene BuilderのGitHubリポジトリを個人GitHubにフォーク
https://github.com/torutk/scenebuilder
* ローカルリポジトリ(自宅PC)にクローン
* ブランチ fix-194-b を作成
* 修正を入れてローカルリポジトリにコミットし、個人GitHubフォークにプッシュ
https://github.com/torutk/scenebuilder/commit/ed4329975b47b4b9a4caecddd35315755e6c2638
* プルリクエストを作成
https://github.com/gluonhq/scenebuilder/pull/322
h4. プルリクエストの反映
プルリクエストに対し、
Gluon CLA(Gluon Individual Contributor License Agreement)に署名を求められたのでざっと読んで署名。
https://docs.google.com/forms/d/16aoFTmzs8lZTfiyrEm8YgMqMYaGQl0J8wA0VJE2LCCY/viewform?edit_requested=true
CLAの中を見ると、会社の業務としてソフトウェア開発をしている中でプルリクエスト(修正コード)を提供する場合は、そのコードが法人著作となるので雇用者(会社)がそのコードの知的財産権を放棄するか、雇用者(会社)がGluonとの法人CLAを結ぶかが必要となるようです。
しばらくすると、プルリクエストがマージされました。
これで次回リリースから日本語が化けなくなるかと期待。
→ MSIパッケージへのビルド手順が見えないので一抹の不安あり。
h4. 問題解消
プルリクエストがマージされた後のリリースとなる Scene Builder 16 で問題が解消されました。
戻る