From: "naruse (Yui NARUSE)" Date: 2012-11-08T03:40:40+09:00 Subject: [ruby-core:49056] [ruby-trunk - Bug #7200][Rejected] Setting external encoding with BOM| Issue #7200 has been updated by naruse (Yui NARUSE). Status changed from Assigned to Rejected I meant it is why. A mode_enc and an encoding are different thing in syntax, implementation and meaning. BOM|UTF-* is not the name of an encoding, but it is a part of mode specifier. ---------------------------------------- Bug #7200: Setting external encoding with BOM| https://bugs.ruby-lang.org/issues/7200#change-32582 Author: brixen (Brian Ford) Status: Rejected Priority: Normal Assignee: naruse (Yui NARUSE) Category: Target version: 2.0.0 ruby -v: ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-darwin10.8.0] File.open will accept, for example, :encoding => "bom|utf-16be:euc-jp" or :encoding => "bom|utf-16be". However, :external_encoding => "bom|utf-16be" raises an ArgumentError. Likewise, IO#set_encoding will accept "bom|utf-16be:euc-jp" but raises an ArgumentError if passed "bom|utf-16be", "euc-jp". It is inconsistent to accept "bom|utf-*" in some cases and not others. See the following IRB transcript. $ irb 1.9.3p286 :001 > f = File.open "foo.txt", "r", :encoding => "bom|utf-16be:euc-jp" => # 1.9.3p286 :002 > f.internal_encoding => # 1.9.3p286 :003 > f.external_encoding => # 1.9.3p286 :004 > f.close => nil 1.9.3p286 :005 > f = File.open "foo.txt", "r" => # 1.9.3p286 :006 > f.set_encoding "bom|utf-16be:euc-jp" => # 1.9.3p286 :007 > f.internal_encoding => # 1.9.3p286 :008 > f.external_encoding => # 1.9.3p286 :009 > f.close => nil 1.9.3p286 :010 > f = File.open "foo.txt", "r" => # 1.9.3p286 :011 > f.set_encoding "bom|utf-16be", "euc-jp" ArgumentError: unknown encoding name - bom|utf-16be from (irb):11:in `set_encoding' from (irb):11 from /Users/brian/.rvm/rubies/ruby-1.9.3-p286/bin/irb:16:in `
' 1.9.3p286 :012 > f = File.open "foo.txt", "w", :external_encoding => "bom|utf-16be" ArgumentError: unknown encoding name - bom|utf-16be from (irb):12:in `initialize' from (irb):12:in `open' from (irb):12 from /Users/brian/.rvm/rubies/ruby-1.9.3-p286/bin/irb:16:in `
' 1.9.3p286 :013 > f = File.open "foo.txt", "rb", :encoding => "bom|utf-16be" => # Thanks, Brian -- http://bugs.ruby-lang.org/