jirbで日本語を扱うには、jirb_swing -Kuとする

jirbに直接日本語を入力しようとすると、文字化けしてしまいます。

C:\>jirb
irb(main):001:0> '???{??'
=> "\302\223\303\272\302\226{\302\214\303\252"
irb(main):002:0> java.lang.String.new('???{??').to_s
=> "\302\223\303\272\302\226{\302\214\303\252"

--noreadline オプションを付けて行編集機能を無効にすると、日本語が入力できるようになりますが、評価結果が文字化けしてしまいます。

C:\>jirb --noreadline
irb(main):001:0> '日本語'
=> "\223\372\226{\214\352"
irb(main):002:0> java.lang.String.new('日本語').to_s
=> "\357\277\275\357\277\275{\357\277\275\357\277\275"

-K オプションでSJISを宣言すると、文字列の評価結果は文字化けしませんが、JavaのStringクラスに渡した結果は文字化けしてしまいます。Javaに値を渡す際に、SJISからUnicodeへのコード変換は行っていないようです。

C:\>jirb -Ks --noreadline
irb(main):001:0> '日本語'
=> "日本語"
irb(main):002:0> java.lang.String.new('日本語').to_s
=> "・\275・\275{・\275・\275"

WindowsコマンドプロンプトではSJISを使っているので、当然ながら -K オプションでUTF-8を宣言すると、文字化けしてしまします。

C:\>jirb -Ku --noreadline
irb(main):001:0> '日本語'
=> "\223?{語"
irb(main):002:0> java.lang.String.new('日本語').to_s
=> "・ス・ス{・ス・ス"

Windowsコマンドプロンプトでchcp 65001を実行すると、UTF-8が使えるらしいのですが、なぜか僕の環境ではjirbを実行できませんでした。

Windowsコマンドプロンプトをあきらめ、jirb_swingを使えば、文字化けが無くなります。

C:\>jirb_swing -Ku
irb(main):001:0> '日本語'
=> "日本語"
irb(main):002:0> java.lang.String.new('日本語').to_s
=> "日本語"