全角?半角?

半角と全角の区別をつけてくれといわれた。理由は印刷時に文字幅を揃えたいから、らしい。いわゆる半角×2=全角な方程式が前提のこと。

これが Shift-JIS だったりしたら全く問題ないのだけど、今回は UTF-8 だった。単純にバイト数を計算しても意味がない。アジアの言語にも対応すること、という案件のため。

いろいろ調べた。検索しまくった。

とりあえず、 UTF-8Unicode にデコードし、その結果 0x0000〜0x007F の ASCII 範囲か 0xFF61〜0xFF9F の halfwidth 範囲のどちらかに入れば半角、という判断方法でどうにかなるもよう。

ただし C# .NET でコーディングする際にはエンディアンにも気をつけないといけない。 System.Text 名前空間には Encoding.Unicode と Encoding.BigEndianUnicode があるからね。

参考資料はこちら。

……信じてる。