Search code examples
rubyutf-8byte-order-mark

How to write BOM marker to a file in Ruby


I have some working code with a crutch to add BOM marker to a new file.

  #writing
  File.open name, 'w', 0644 do |file|
    file.write "\uFEFF"
    file.write @data
  end

  #reading
  File.open name, 'r:bom|utf-8' do |file|
    file.read
  end

Is there any way to automatically add the marker without writing cryptic "\uFEFF" before the data? Something like File.open name, 'w:bom' # this mode has no effect maybe?


Solution

  • Alas I think your manual approach is the way to go, at least I don't know a better way:

    http://blog.grayproductions.net/articles/miscellaneous_m17n_details

    To quote from JEG2's article:

    Ruby 1.9 won't automatically add a BOM to your data, so you're going to need to take care of that if you want one. Luckily, it's not too tough. The basic idea is just to print the bytes needed at the beginning of a file.