[ruby-list:49855] Re: encoding of backtrace
From:
OHARA Shigeki <os@...>
Date:
2014-06-29 12:45:19 UTC
List:
ruby-list #49855
大原です。 From: Nobuyoshi Nakada <nobu@ruby-lang.org> Subject: [ruby-list:49853] Re: encoding of backtrace Message-ID: <53AAE12D.4090106@ruby-lang.org> Date: Wed, 25 Jun 2014 23:48:13 +0900 > > これを端末の encoding に合わせて出力する方法はあるでしょうか? > > 今のところは対応していません。変換できない文字があった場合にさらに例外 > が発生してしまうのが悩ましいところです。 なるほど。現状は、敢えてそのまま出力している、ということでしょうか。 さらにコードなどを調べずに聞いてしまいますが、 これは仕組みとしてはどういうふうになっているのでしょうか? $stderr を通る物は全て set_encoding の指定に従って 変換されると思っていたのですが (そこから勘違いしてるかもしれませんが) 、 backtrace は変換されないのは何故だろうという疑問です。 > ソースコードのエンコーディングは__ENCODING__で得られますが、String自体 > がエンコーディングを持っているので、internal encodingを指定する必要はあ > りません。 なるほど。 あと、よく考えてみたら、 require した別のファイルの __ENCODING__ が異なっていれば破綻しますし、 そういう意味でも internal encoding の指定は要りませんね。 というわけで、こんな感じでいけました。 console_encoding = Encoding.locale_charmap $stdout.set_encoding(console_encoding) $stderr.set_encoding(console_encoding) $stdin.set_encoding(console_encoding) io.c を眺めていたら、 void rb_stdio_set_default_encoding(void) というのを見つけたので、 IO.stdio_set_encoding() があると便利なのかなと思いました。 もっとも、これでもせいぜい 3 行が 1 行になる程度ですが。 ---- OHARA Shigeki (大原 重樹) <os@iij.ad.jp>