Подтвердить что ты не робот

Предоставляет ли Ruby способ File.read() с указанной кодировкой?

В ruby ​​1.9.x мы можем указать кодировку с File.open('filename','r:iso-8859-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
4b9b3361

Ответ 1

Из прекрасного руководства:

read (имя, [длина [, смещение]], open_args) → строка

Открывает файл, необязательно ищет данный offset, а затем возвращает length байты (по умолчанию остальная часть файла). read гарантирует, что файл будет закрыт перед возвратом.

Если последний аргумент является хешем, он указывает параметр для внутреннего open().

Итак, вы можете сказать следующее:

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