From: "naruse (Yui NARUSE)" Date: 2012-06-20T06:12:06+09:00 Subject: [ruby-dev:45782] [ruby-trunk - Bug #6606] default_external encoding and STDOUT and UTF-8 Issue #6606 has been updated by naruse (Yui NARUSE). kosaki (Motohiro KOSAKI) wrote: > 2012/6/19 naruse (Yui NARUSE) : > > > > Issue #6606 has been updated by naruse (Yui NARUSE). > > > > > > shyouhei (Shyouhei Urabe) wrote: > >> なぜ、そうなっているかを聞いていいですか? > >> > >> STDOUTは他のIOオブジェクトと違って最初から勝手に開かれているので、最初からエンコーディングを指定して開ける方法が(-Eでなくてもよいので)提供されていた方がよいかとおもいます。 > > > > そういうニーズが理論上存在しうることには気づいていましたが、今日まで指摘されなれなかったからと、 > > 実際にそのような指定を行うための適切な指定方法が思いつかなかったからです。 > > これだけだと、なんとも判断がつかないので -Eeuc-jp が現在の挙動のほうが望ましいと考えて理由について教えていただけますでしょうか -E は Encoding.default_external を設定するオプションであり、 default external を設定しても自動変換は走らないからです。 % LANG=C ruby -Eeuc-jp -e'open("p","w"){|f|f.puts "\u3042\u3093"}' % hexdump -C p 00000000 e3 81 82 e3 82 93 0a |.......| 00000007 なお、default internal も設定すると自動変換が走るようになるので、設定するという技はあります。 % LANG=C ruby -Eeuc-jp:utf-8 -e'puts "\u3042\u3093"' | hexdump -C 00000000 a4 a2 a4 f3 0a |.....| 00000005 ---------------------------------------- Bug #6606: default_external encoding and STDOUT and UTF-8 https://bugs.ruby-lang.org/issues/6606#change-27309 Author: shyouhei (Shyouhei Urabe) Status: Rejected Priority: Normal Assignee: Category: M17N Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-06-19) [x86_64-linux] =begin 微妙なので意図どおりに動いているなら申し訳ない、以下のように -Eを指定してもUTF-8文字列がUTF-8のままで出力されてくるのは「そういうもの」ですか? LANG=C ruby -Eeuc-jp -e'puts "\u3042\u3093"' | hexdump -C 00000000 e3 81 82 e3 82 93 0a |.......| =end -- http://bugs.ruby-lang.org/