Я подозреваю, что это как-то связано с разницей между одинарными и двойными кавычками со строковыми литералами в ruby:
ruby-1.9.1-p378 > def t(str) ; str.index(str) ; end
=> nil
ruby-1.9.1-p378 > t 'abc'
=> 0
ruby-1.9.1-p378 > t "\x01\x11\xfe"
=> nil
ruby-1.9.1-p378 > t '\x01\x11\xfe'
=> 0
Короткий ответ заключается в том, что использование одинарных кавычек делает минимальную обработку текста,но двойные кавычки допускают интерполяцию, экранирование символов и некоторые другие вещи.
Некоторые примеры:
#interpolation
ruby-1.9.1-p378 > x = 5 ; 'number: #{x}'
=> "number: \#{x}"
ruby-1.9.1-p378 > x = 5 ; "number: #{x}"
=> "number: 5"
#character escaping
ruby-1.9.1-p378 > puts 'tab\tseparated'
tab\tseparated
=> nil
ruby-1.9.1-p378 > puts "tab\tseparated"
tab separated
=> nil
#hex characters
ruby-1.9.1-p378 > puts '\x01\x11\xfe'
\x01\x11\xfe
=> nil
ruby-1.9.1-p378 > puts "\x01\x11\xfe"
�
=> nil
Я уверен, что кто-то может лучше объяснить, почему это происходит, это как раз то, чтоЯ испытал на себе рубин.