青山です。

文字コードは自動判定よりも $KCODE を使った方が良さそうですね。

class String
  def jlength
    GC::start
    case $KCODE[0]
    when ?s, ?S
      l = self.gsub(/[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]/n, ' ').length
    when ?e, ?E
      l = self.gsub(/[\xa1-\xfe][\xa1-\xfe]/n, ' ').length
    else
      l = self.length
    end
    GC::start
    l
  end
end


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>