こんにちは。ゴトウと申します。

手元に入っていたruby 1.8.5 (2006-08-25) [i386-mswin32]
で試してみましたが、同じくそうなります。

http://www2.ruby-lang.org/ja/man/?cmd=view;name=FAQ%3A%3A%C6%FC%CB%DC%B8%EC%A4%CE%BC%E8%A4%EA%B0%B7%A4%A4
にあるように

require 'jcode'
すると、#1でもうまく行きますね。

07/05/15 に Fujioka<fuj / rabbix.jp> さんは書きました:
> 藤岡です。
>
> 環境はdebian sarge+backportsの
> ruby 1.8.5 (2006-08-25) [i386-linux]です。
>
> #!/usr/bin/ruby -Ku
>
> def str_upcase(str)
>  oldkcode=$KCODE
>  $KCODE="UTF-8"
> #1  result=str.tr("ャュョァィゥェォッ","ヤユヨアイウエオツ")
> #2  result=str.tr("ャュョァィゥェォ","ヤユヨアイウエオ").gsub(/ッ/,'ツ'))
>  result.gsub!(/ | |\r|\n|\t/,'')
>  $KCODE=oldkcode
>  result
> end
> p str_upcase("ホウジョウ ソウウン")
>
> 以上のようなコードで#2は動作するのに
> #1は文字化けします。
> ッが何か関係しているのか思ってはいるのですが、
> よくわかっていません。
>