web-dev-qa-db-ja.com

Rubyは、指定されたエンコーディングでFile.read()を実行する方法を提供しますか?

Ruby 1.9.xでは、File.open('filename','r:iso-8859-1')を使用してエンコードを指定できます。多くの短いファイルを読み取る場合は、1行のFile.read()を使用することを好みます文字列に直接変換します。エンコードを直接指定する方法はありますか、それとも次のいずれかに頼らなければなりませんか?

str = File.read('filename')
str.force_encoding('iso-8859-1')

または

f = File.open('filename', 'r:iso-8859-1')
s = ''
while (line = f.gets)
    s += line
end
f.close
34

fine manual から:

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

ファイルを開き、オプションで指定されたoffsetをシークし、lengthバイトを返します(デフォルトではファイルの残りの部分になります)。 readは、戻る前にファイルが確実に閉じられるようにします。

最後の引数がハッシュの場合、内部のopen()のオプションを指定します。

したがって、次のように言うことができます。

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