[ruby-list:49852] encoding of backtrace
From:
OHARA Shigeki <os@...>
Date:
2014-06-25 12:35:42 UTC
List:
ruby-list #49852
大原といいます。 Ruby 2.1 で EUC-JP で書かれたコードを 端末が EUC-JP でも UTF-8 でも動くようにしたいと思い、 下記のようなコードを書いてみました。 ---- ここから ---- #!/usr/local/bin/ruby # -*- mode: ruby; encoding: euc-jp -*- console_encoding = Encoding.locale_charmap $stdout.set_encoding(console_encoding, Encoding::CP51932) $stderr.set_encoding(console_encoding, Encoding::CP51932) $stdin.set_encoding(console_encoding, Encoding::CP51932) puts "ほげ" warn "ほげ" raise StandardError, "ほげ" ---- ここまで ---- これを UTF-8 な端末で動かすと、 ---- ここから ---- ほげ ほげ z.rb:11:in `<main>': **ココが文字化け** (StandardError) ---- ここまで ---- のように、 puts と warn は UTF-8 で出力されるのですが、 最後の例外の backtrace だけは EUC-JP になって文字化けしてしまいます。 これはそういうものでしょうか? これを端末の encoding に合わせて出力する方法はあるでしょうか? あと、 set_encoding のくだりはもっとこうした方が良いというのがあれば、 教えていただけるとありがたいです。 # もっとスッキリ書けないかというのと、 # Encoding::CP51932 と即値で書いているところを、 # ソースコードの encoding を取得したものをセットしたい。 ---- OHARA Shigeki (大原 重樹) <os@iij.ad.jp>