CrazyGames のプレビューで日本語が文字化け:ファイルは正しかった。原因は特定できず、ASCII 表記に逃がした
すし積む 開発の記録 / 2026年10月
すし積むを、ゲームポータルのプレビューで開いたとき、「大連鎖!」の「連」の字だけが、壊れて出る、という報告がありました。ファイルを調べると、文字は、ちゃんと正しく入っていました。原因が分からないまま、「壊れても困らない形」にして、先に進んだ経緯を、コミットの記録で書きます。
「連」だけが、壊れる
報告は、CrazyGames のプレビューからでした。ゲームの中で、連鎖が起きると、画面に「大連鎖!」と出ます。その「連」が、文字として壊れて表示される。ほかの字は、普通に出ています。
まず、ゲームのファイルそのものを調べました。バイト列は、正しいものでした。つまり、手元のファイルは壊れていません。壊れているのは、配信先に届くまでの受け渡しの途中、あるいは、配信先での読み取りのどこか、ということになります。ただ、コミットには、どこで壊れたのかは、書かれていません。原因は、特定できていません。
原因が分からないときの、直し方
原因の場所が、自分の手の外にあるなら、どこで壊れても、影響が出ない形にしておく、という方針にしました。
- 表示に使う文字を、ASCII だけの表記に置き換える。日本語の文字を、そのままファイルに書かず、スクリプトの文字列は
\uXXXX、HTML の本文と属性は&#xXXXX;の形にします。多バイトの文字が途中で壊れても、ASCII だけなら、壊れようがありません。 - 置き換えは、道具(
tools/asciify.mjs)に任せる。日本語のまま書き直したあとで、この道具を通せば整います。何度通しても、同じ結果になります。コメントは、読めるように日本語のまま残します(壊れても、画面には出ないからです)。 - 書体の指定の後ろに、漢字を持つ書体を足す。書体に、その字が無くて、字が出ない、という筋道も、塞ぎました。
同じ点検で見つかった、ほかの二つ
- 絵文字が、端末によって出ない。地球と携帯電話の絵文字は、端末によっては表示されません。図形(SVG)で描き直しました。
- 連鎖中に浮かぶ文字が、重なって読めない。近い位置に出る文字は、上へ逃がすようにしました。
翌日:十四の言語で、枠に収まるか
このゲームは、14 の言語に対応しています。訳文は、日本語より長くなることが多く、PC の脇の柱(幅 192px)や、札の中で、溢れやすくなります。そこで、言語を順に切り替えて、読み直して、親の枠からはみ出した所と、横に流れた所を数える道具を足しました。
結果は、14 言語 × 2 画面で、はみ出しなしです。字が壊れる問題と同じで、「溢れていない」ことも、目で見るより、数えるほうが確かです。
分かったこと
原因が分からないときは、原因の場所に、頼らない形にする。
- ファイルが正しくても、画面が正しいとは限らない。途中の受け渡しや、配信先の読み取りは、自分では直せません。
- 分からないことは、分からないと、記録しておく。今回の「連」が、なぜ壊れたのかは、いまも特定できていません。ASCII 化は、原因を直したのではなく、原因に、影響されない形にしただけです。
- 見た目の崩れは、機械に数えさせる。14 言語を、目で全部確かめるのは、現実的ではありません。
この記事は、コミット(2026年9月7日、9月8日)の記録から書きました。「連」が壊れた原因は、記録に残っていないため、書いていません。
この話に出てくるもの
- すし積む(作品ページ) — 落ち物パズルのゲーム
- CrazyGames に落ちた — 同じポータルの、別の記録
ほかの記録
- CrazyGames に落ちた:理由は書かれていなかったので、撮って探した — ゲームポータルの審査に「全体の品質が期待に達していない」とだけ書かれて落ちた。自分で画面を撮って見つけた四つの原因と、測って選んだ直し方の記録。
- 無料枠を半分しか使わない番付にした:呼び出し5回を2回に — 番付サーバーが無料枠を使う量を半分にした。一人が遊ぶ一回の呼び出しは5回から2回、読んだ行は421から221へ。順位の数え方と、前置きの呼び出しをなくした経緯。
- 「山は89%で落ち着く」は誤りだった:測定のほうが間違っていた話 — すし積むのバランスを測りなおしたら、前の測定が落下中のネタを数えていた。大きさの階段の逆行、縦穴の桶、床のすり抜け。三つの原因と直したあとの数字。
コメント
感想や、記事の間違いの指摘は、ここへ。書くには、GitHub のアカウントが要ります。
押すと、giscus(giscus.app)と GitHub に接続します。押さなければ、接続しません。詳しくはあつかいに書いています。