Rubyで全角文字列を2バイトとして数えたい
Ruby(1.9以上)でエンコードをUTF-8として利用している場合、
Stringのbytesize
メソッドは基本的にマルチバイトを3バイトして返します。*1
"abc123){*~".bytesize #=>10 "あイ冬".bytesize #=>9
やりたいこと
等幅のフォントを利用して、文字列と空白を組み合わせ固定長のような形式の 文字列にしたい。 そのため、全角文字は2(半角2文字分なので)、半角文字は1として文字列をカウントしたい。
例えば
- "漢字"という文字列は4
- "ab"という文字列は2
- "全角space"という文字列は9
というような具合です。
コード
以下の様なget_exact_size
メソッドを作成しました。
https://gist.github.com/7541358
というような方法で 全角→2、半角→1という方法で取得出来ました。
count_multi_byte
はおまけで作りました。
もっといい方法があればコメント下さい。
参考:マルチバイト文字を含む文字列の表示桁数を合わせる - 紅孔雀
*1:一部4バイトとして返す文字列もあります : http://www.softel.co.jp/blogs/tech/archives/596