BOM!BOMB!BON!(意味なし)

module function Kernel.#open

エンコーディングの指定

ext_enc(外部エンコーディング)が指定されている場合、読み込まれた文字列にはこのエンコーディングが指定され、出力する文字列はそのエンコーディングに変換されます。

ext_encが'-bom'で終わる場合、その入力に含まれるBOMはあらかじめ削られます。また、BOMがあった場合、入力された文字列にはそのBOMに対応するエンコーディングが設定されます。

int_encも指定されていた場合、入力された文字列をext_encでエンコーディングされた文字列とみなしてint_encへと変換し、その結果にint_encを設定して返します。 

引用:[http://doc.ruby-lang.org/ja/1.9.2/method/Kernel/m/open.html:title=module function Kernel.#open]

リファレンスでたまたま見つけてビックリした。
えぇ〜〜〜、わざわざBOM削ってたよorz


つーか、Encodingに-bomで終わるのなんてあたっけ?
ということでirbで確認

Encoding.list.map(&:to_s).grep(/bom/)
# => [] 

あれ??ないじゃんw
ないけど付ければいいってこと?

puts File.open("utf8.txt", "r:UTF-8-bom"){ |fp| fp.read(3).dump }
# => warning: Unsupported encoding UTF-8-bom ignored

だよねー
色々やってみたけど、わからず


念のためこっち(Index of Classes & Methods in Ruby 1.9.3 (Ruby 1.9.3) )で確認したら…
『If ext_enc starts with ‘BOM|’,〜 』ってなっている!!
ってことでコチラが正解

puts File.open("utf8.txt", "r:UTF-8"){ |fp| fp.read(6).dump }
# => "\xEF\xBB\xBF20\t"
puts File.open("utf8.txt", "r:BOM|UTF-8"){ |fp| fp.read(3).dump }
# => "20\t"
puts File.open("utf8n.txt", "r:BOM|UTF-8"){ |fp| fp.read(3).dump }
# => "20\t"

おー、イイ感じ!
無理矢理削るのがなんかイヤだったのでコレは嬉しいw


全然関係ないが、今日、3点足りなくて失敗した「1日で黄金聖闘士」計画の残念賞(銀)が届いていた。
自分にとっては残念賞だったし、全然期待していなかったんだけど、思ったより以上に良いモノだった
ので、やっぱり黄金が欲しくなった。