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日で黄金聖闘士」計画の残念賞(銀)が届いていた。
自分にとっては残念賞だったし、全然期待していなかったんだけど、思ったより以上に良いモノだった
ので、やっぱり黄金が欲しくなった。