Issue #10417 has been updated by Yui NARUSE.

Target version changed from current: 2.2.0 to Next Major

fptr.encs.enc と fptr.encs.enc2 って不可分なものな気がするのと、
set_encoding というそれまでの前提が覆ってる状況で前の状態を尊重する理由をあんまり感じないので、
現在の値を保持するべきだとはあまり思いません。

そもそも set_encoding(ext_enc, int_enc, opts) の引数たちと内部の状態に若干解離があるとか、
optsは吹っ飛ばさざるを得ないので、int_encも飛ばしていいんじゃないとか、
そもそもset_encoding()って位置から設定し直すメソッドな雰囲気を感じている、とか。


----------------------------------------
Bug #10417: IO#set_encoding without int_enc doesn't keep current internal encoding
https://bugs.ruby-lang.org/issues/10417#change-49589

* Author: Usaku NAKAMURA
* Status: Open
* Priority: Normal
* Assignee: 
* Category: core
* Target version: Next Major
* ruby -v: -
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
bugかfeatureか迷ったんですが、とりあえずbugで。

`IO#set_encoding`を1引数で呼び出したとき、つまりexternal encodingのみを指定した場合、internal encodingは`nil`が指定されたとみなされ、`Encoding.default_inernal`が設定されます。
従って、もともとこのIOにinternal encodingが設定されていた場合、それが上書きされてしまいます。
internal encodingを指定せずに呼び出した場合は、現在の値を保持すべきではないでしょうか?



-- 
https://bugs.ruby-lang.org/