Выбор кодировки при записи в файл в Ruby 1.9
April 16, 2012 , revised April 17, 2012 in Ruby on Rails# coding: utf-8
foo = 'тест'.encode('windows-1251')
puts foo.encoding # windows-1251
puts foo # "\xF2\xE5\xF1\xF2"
File.open('foo.txt', 'w') {|f| f.write(foo) }
Угадай, что будет в foo.txt
? Строка “тест” в кодировке UTF-8!
Оказывается, Ruby 1.9 магическим образом при записи в файл перекодировывает строки в кодировку по умолчанию.
Чтоб записать в файл данные в Windows-1251, нужно указать эту кодировку при открытии файла:
foo = 'тест'
File.open('foo.txt', 'w:windows-1251') {|f| f.write(foo) }
А так в файл будет записана строка в CP1251.
Нет, серьёзно
По делу
А если серьёзно, то эта абстракция полезная и замечательная. –Вот только во всех остальных местах при неправильной кодировке возникнет EncodingError
(например, если конкатенировать Windows-1251 строку с UTF-8 строкой), а тут произойдет неявное преобразование.– Вот только наличие неявного преобразования кодировки в некоторых местах языка и отсутствие его в других местах не делает Ruby прозрачнее. Какого хрена?
Понравился пост? Купи мне кофе