Предоставляет ли 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

1 ответ

Решение

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

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

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

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

Таким образом, вы можете сказать такие вещи:

>> s = File.read('pancakes', :encoding => 'iso-8859-1')
>> s.encoding
=> #<Encoding:ISO-8859-1>
Другие вопросы по тегам