LoginSignup
6
2

More than 3 years have passed since last update.

【Unity】全角を2、半角を1としてbyte文字数を数える

Last updated at Posted at 2020-03-17

プレイヤー名やモンスターのニックネームなど文字数の制限を行いたい場合に、全角は2、半角は1として合計30まで、といった数え方で文字数を制限したいケースの実装方法です。

よくある内容ですが、実際に実装するのはなかなか手順が多く大変でした。

要点

  • Shift_JISでByteにエンコードする
  • 「I18N.CJK.dll」と「I18N.dll」をプロジェクトにインポートする

Shift_JISでByteにエンコードする

通常のエンコードといえばUTF8だと思いますが、UTF8だと漢字が3byte、かなが2byteだったりするため、文字数のカウントには向いてません。

そこで、文字数のカウントではShift_JISへのエンコードを行います。

using System.Text;

public static class StringEncodingExtension 
{
    public static int GetSJISByteCount(this string text)
    {
        return Encoding.GetEncoding("Shift_JIS").GetByteCount(text);
    }
}

拡張メソッドで書いておけば、適当な場所でstringのbyte文字数を数えられます。

using UnityEngine;

publi class StringEncodingExtension 
{
    public void Start()
    {
        string nickName = "キラーマシン2";
        // >>> 13
        Debug.Lot(nickName.GetSJISByteCount());
    }
}

「I18N.CJK.dll」と「I18N.dll」をプロジェクトにインポートする

Unityエディタならコード書くだけで済みますが、実は実機でやろうとするとShift_JISエンコードがサポート対象外となってエラーになってしまいます。

対応策として、「I18N.CJK.dll」と「I18N.dll」をプロジェクトにインポートさせてあげると上手くいきました。

参考

感想

完全にぼやきですが、なんで文字数数えたいだけなのにこんな苦労しなきゃならないんだ...? って思いました。

6
2
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2