From: "duerst (Martin Dürst)" Date: 2012-11-08T12:51:52+09:00 Subject: [ruby-core:49081] [ruby-trunk - Bug #7200] Setting external encoding with BOM| Issue #7200 has been updated by duerst (Martin D��rst). Brian (or others), [written in part to help Shouhei a bit] Do you have an actual use case where you need something like f.set_encoding "bom|utf-16be", "euc-jp" If yes, can you explain? The current behavior in in part influenced by implementation. But there is also a conceptual issue, because "bom|" only applies at the start of the file, and may have different implications for input (check for a BOM) and output (add a BOM). So we have to carefully think what's the best way to make this easy for programmers to use the right way. Regards, Martin. ---------------------------------------- Bug #7200: Setting external encoding with BOM| https://bugs.ruby-lang.org/issues/7200#change-32609 Author: brixen (Brian Ford) Status: Assigned 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/