Bug #6606

default_external encoding and STDOUT and UTF-8

Added by Shyouhei Urabe over 2 years ago. Updated over 2 years ago.

[ruby-dev:45769]
Status:Rejected
Priority:Normal
Assignee:-
ruby -v:ruby 2.0.0dev (2012-06-19) [x86_64-linux] Backport:

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

History

#1 Updated by Yui NARUSE over 2 years ago

  • Status changed from Open to Rejected

現在の仕様通りです。
$stdoutのexternal encoding に明示的に EUC-JP を設定すると変換されるようになります。

#2 Updated by Shyouhei Urabe over 2 years ago

なぜ、そうなっているかを聞いていいですか?

STDOUTは他のIOオブジェクトと違って最初から勝手に開かれているので、最初からエンコーディングを指定して開ける方法が(-Eでなくてもよいので)提供されていた方がよいかとおもいます。

#3 Updated by Nobuyoshi Nakada over 2 years ago

  • Description updated (diff)

#4 Updated by Yui NARUSE over 2 years ago

shyouhei (Shyouhei Urabe) wrote:

なぜ、そうなっているかを聞いていいですか?

STDOUTは他のIOオブジェクトと違って最初から勝手に開かれているので、最初からエンコーディングを指定して開ける方法が(-Eでなくてもよいので)提供されていた方がよいかとおもいます。

そういうニーズが理論上存在しうることには気づいていましたが、今日まで指摘されなれなかったからと、
実際にそのような指定を行うための適切な指定方法が思いつかなかったからです。

#5 Updated by Motohiro KOSAKI over 2 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 が現在の挙動のほうが望ましいと考えて理由について教えていただけますでしょうか

#6 Updated by Yui NARUSE over 2 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

Also available in: Atom PDF