青山です。
文字コードは自動判定よりも $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>