Bug #6606
closeddefault_external encoding and STDOUT and UTF-8
Description
=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
Updated by naruse (Yui NARUSE) over 12 years ago
- Status changed from Open to Rejected
現在の仕様通りです。
$stdoutのexternal encoding に明示的に EUC-JP を設定すると変換されるようになります。
Updated by shyouhei (Shyouhei Urabe) over 12 years ago
なぜ、そうなっているかを聞いていいですか?
STDOUTは他のIOオブジェクトと違って最初から勝手に開かれているので、最初からエンコーディングを指定して開ける方法が(-Eでなくてもよいので)提供されていた方がよいかとおもいます。
Updated by nobu (Nobuyoshi Nakada) over 12 years ago
- Description updated (diff)
Updated by naruse (Yui NARUSE) over 12 years ago
shyouhei (Shyouhei Urabe) wrote:
なぜ、そうなっているかを聞いていいですか?
STDOUTは他のIOオブジェクトと違って最初から勝手に開かれているので、最初からエンコーディングを指定して開ける方法が(-Eでなくてもよいので)提供されていた方がよいかとおもいます。
そういうニーズが理論上存在しうることには気づいていましたが、今日まで指摘されなれなかったからと、
実際にそのような指定を行うための適切な指定方法が思いつかなかったからです。
Updated by kosaki (Motohiro KOSAKI) over 12 years ago
2012/6/19 naruse (Yui NARUSE) naruse@airemix.jp:
Issue #6606 has been updated by naruse (Yui NARUSE).
shyouhei (Shyouhei Urabe) wrote:
なぜ、そうなっているかを聞いていいですか?
STDOUTは他のIOオブジェクトと違って最初から勝手に開かれているので、最初からエンコーディングを指定して開ける方法が(-Eでなくてもよいので)提供されていた方がよいかとおもいます。
そういうニーズが理論上存在しうることには気づいていましたが、今日まで指摘されなれなかったからと、
実際にそのような指定を行うための適切な指定方法が思いつかなかったからです。
これだけだと、なんとも判断がつかないので -Eeuc-jp が現在の挙動のほうが望ましいと考えて理由について教えていただけますでしょうか
Updated by naruse (Yui NARUSE) over 12 years ago
kosaki (Motohiro KOSAKI) wrote:
2012/6/19 naruse (Yui NARUSE) naruse@airemix.jp:
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