読者です 読者をやめる 読者になる 読者になる

エディトリアルデザイナーのアプリ制作日記

Unityで遊ぶ個人開発者のメモ書き

文字の全角半角チェック

Unity アプリ 縦書き ノベル

 縦書きノベル制作日記の続き。

 縦書き表示をするときに必要なのが、半角文字を回転表示させるための全角・半角チェック。いつものように軽くググってみると、半角カナなどの問題によりUnicodeできちんと判別するのは面倒ということで、Shift-JIsコードで文字のバイト数(全角2バイト、半角1バイト)を調べる方法でいくことに。

 一応、実装前にテストしておこうということで、サイトで見つけたコードをちょいちょいと拝借して、下記のコードを実行。

        string test = "テスト文字列aaa";
        char[] chars = test.ToCharArray();
        this.GetComponent<Text>().text = test + "\n";

        Encoding chk = Encoding.GetEncoding("shift_jis");    //全角半角チェック用

        for (int index = 0; index < chars.Length; index++) {
            string work = string.Format("'{0}' - {1} byte(s)", chars[index], chk.GetByteCount(chars, index, 1)) + "\n";
            this.GetComponent<Text>().text += work;
        }
        this.GetComponent<Text>().text += "チェック終了";

実行画面(エディタ上)

f:id:hamazakifactory:20150928162247j:plain

ふーん、こうなるのかぁ、と思いつつ、何気なくAndroid実機でビルドしてみると、、、、

実行画面(freetel FT142A上)

f:id:hamazakifactory:20150928162449j:plain

見ての通り、何故か、

 Encoding chk = Encoding.GetEncoding("shift_jis"); 

以降のテキストが表示されなくなってしまいました。

 しばらく、調べたりじたばたしてみましたが、理由はわからず。結局、文字コードで全角・半角を判別しているサンプルを見つけて実装する事になりました。しっかし、やればやるほどわからないことが増えていく、、、がんばろ。