Project

General

Profile

Actions

Bug #6606

closed

default_external encoding and STDOUT and UTF-8

Added by shyouhei (Shyouhei Urabe) over 12 years ago. Updated over 12 years ago.

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

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) :

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) :

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0