На самом деле предыдущий ответ Алексея Д. неполон. Хотя в файловых системах Unix нет «текстового» режима, в Ruby есть разница между открытием файлов в двоичном и недвоичном режимах:
s = File.open('/tmp/test.jpg', 'r') { |io| io.read }
s.encoding
=> #<Encoding:UTF-8>
отличается от (обратите внимание на "rb"
)
s = File.open('/tmp/test.jpg', 'rb') { |io| io.read }
s.encoding
=> #<Encoding:ASCII-8BIT>
Последний, как говорят docs , устанавливает внешнюю кодировку в ASCII-8BIT, что говорит Ruby не пытаться интерпретировать результат в UTF-8. Вы можете добиться того же самого, явно задав кодировку с помощью s.force_encoding('ASCII-8BIT')
. Это важно, если вы хотите прочитать двоичные данные в строку и переместить их (например, сохранить их в базе данных и т. Д.).