[ruby-trunk - Bug #6606][Open] default_external encoding and STDOUT and UTF-8

Issue #6606 has been reported by shyouhei (Shyouhei U.).


Bug #6606: default_external encoding and STDOUT and UTF-8

Author: shyouhei (Shyouhei U.)
Status: Open
Priority: Normal
Assignee:
Category: M17N
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-06-19) [x86_64-linux]

微妙なので意図どおりに動いているなら申し訳ない、以下のように
-Eを指定してもUTF-8文字列がUTF-8のままで出力されてくるのは「そういうもの」ですか?

LANG=C ruby -Eeuc-jp -e’puts “\u3042\u3093”’ | hexdump -C
00000000 e3 81 82 e3 82 93 0a |…|

Issue #6606 has been updated by naruse (Yui NARUSE).

Status changed from Open to Rejected

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

Bug #6606: default_external encoding and STDOUT and UTF-8

Author: shyouhei (Shyouhei U.)
Status: Rejected
Priority: Normal
Assignee:
Category: M17N
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-06-19) [x86_64-linux]

微妙なので意図どおりに動いているなら申し訳ない、以下のように
-Eを指定してもUTF-8文字列がUTF-8のままで出力されてくるのは「そういうもの」ですか?

LANG=C ruby -Eeuc-jp -e’puts “\u3042\u3093”’ | hexdump -C
00000000 e3 81 82 e3 82 93 0a |…|

Issue #6606 has been updated by shyouhei (Shyouhei U.).

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

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

Bug #6606: default_external encoding and STDOUT and UTF-8

Author: shyouhei (Shyouhei U.)
Status: Rejected
Priority: Normal
Assignee:
Category: M17N
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-06-19) [x86_64-linux]

微妙なので意図どおりに動いているなら申し訳ない、以下のように
-Eを指定してもUTF-8文字列がUTF-8のままで出力されてくるのは「そういうもの」ですか?

LANG=C ruby -Eeuc-jp -e’puts “\u3042\u3093”’ | hexdump -C
00000000 e3 81 82 e3 82 93 0a |…|

Issue #6606 has been updated by nobu (Nobuyoshi N.).

Description updated


Bug #6606: default_external encoding and STDOUT and UTF-8

Author: shyouhei (Shyouhei U.)
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

2012/6/19 naruse (Yui NARUSE) [email protected]:

$B<B:]$K$=$N$h$&$J;XDj$r9T$&$?$a$NE,@Z$J;XDjJ}K!$,;W$$$D$+$J$+$C$?$+$i$G$9!#(B
$B$3$l$@$1$@$H!"$J$s$H$bH=CG$,$D$+$J$$$N$G(B -Eeuc-jp
$B$,8=:_$N5sF0$N$[$&$,K>$^$7$$$H9M$($FM}M3$K$D$$$F65$($F$$$?$@$1$^$9$G$7$g$&$+(B

Issue #6606 has been updated by naruse (Yui NARUSE).

shyouhei (Shyouhei U.) wrote:

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

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

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

Bug #6606: default_external encoding and STDOUT and UTF-8

Author: shyouhei (Shyouhei U.)
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

Issue #6606 has been updated by naruse (Yui NARUSE).

kosaki (Motohiro KOSAKI) wrote:

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

これだけだと、なんとも判断がつかないので -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

Author: shyouhei (Shyouhei U.)
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