ウェブサービスを作っています。

全角単位で文字数を取得する

以前PHP で書きましたが、今回は Ruby で書きました。
Ruby 初心者だから、超恥ずかしいコードなのかも><
とりあえず晒します。

class String
  def zen_length(kcode = 'u')
    require 'jcode'
    tmp = $KCODE
    $KCODE = kcode

    cnt = 0.0
    self.each_char { |c| cnt += c.mbchar? ? 1.0 : 0.5 }

    $KCODE = tmp
    cnt
  end
end

print 'あいうえお123'.zen_length  # => 6.5


utf-8 だと半角カナは 1 文字扱い。