Does Ruby provide a way to do File.read() with specified encoding?

encoding, file, ruby

Solution

From the fine manual:

read(name, [length [, offset]], open_args) → string

Opens the file, optionally seeks to the given `offset`, then returns `length` bytes (defaulting to the rest of the file). `read` ensures the file is closed before returning.

If the last argument is a hash, it specifies option for internal open().

So you can say things like this:

s = File.read('pancakes', :encoding => 'iso-8859-1')
s.encoding
#<Encoding:ISO-8859-1>

Problem

In ruby 1.9.x, we can specify the encoding with `File.open('filename','r:iso-8859-1')`. I often prefer to use a one-line File.read() if I am reading many short files into strings directly. Is there a way I can specify the encoding directly, or do I have to resort to one of the following? ``` str = File.read('filename') str.force_encoding('iso-8859-1') ``` or ``` f = File.open('filename', 'r:iso-8859-1') s = '' while (line = f.gets) s += line end f.close ```

Original source