UNICODEでの半角全角判定

拙著にも書いてますが、文字の幅はフォントによって異なり、また、細いスペース(thin space)なども存在するので半角と全角に二分すること自体に無理がありますが、それでも二分したいことがあるのも事実です。
さしあたりシフトJISで半角と言われている文字のみを半角と見なすのが安全ではないかと思います。
※全角を半角と認識したために文字が欄外にはみ出てしまうより、半角を全角と認識して欄からはみ出ないように考えた方が安全ではないか?という意味

C#例

            public bool IsHankaku(int pUTF32)
            {
                // ASCII範囲は半角とみなす
                if (pUTF32 <= 0x7F) {
                    return true;    // 半角
                }

                // U+80~A0は半角とみなす
                if ((pUTF32 >= 0x80) && (pUTF32 <= 0xA0)) {
                    return true;    // 半角
                }

                // 半角・全角形内の半角カタカナは半角と見なす
                if ((pUTF32 >= 0xFF61) && (pUTF32 <= 0xFF9F)) {
                    return true;    // 半角
                }

                // U+A5は全角とみなす?
                if (pUTF32 == YENSIGNuA5) {
                    if (this.YenSignA5IsFullWidth == false) {
                        return true;    // 半角
                    }
                }

                return false;   // 全角
            }

UNICODEでは円記号(¥、U+A5)は半角(EAWでNaと定義)扱いなのですが、この文字を全角として扱うプログラムも多いのでややこしいというか悩みどころです。
U+5Cはバックスラッシュ(リバースソリダス)だと皆が認識する日はいつくるのか。

コメントを残す

メールアドレスが公開されることはありません。