Некоторые языки (C, Java 5) позволяют Вам получать доступ к двоичному значению своих плаваний. Таким образом, можно извлечь первые биты N мантиссы (игнорирующий последние несколько битов, которые доставляют неприятности во время, выдерживают сравнение), и вычислите хеш от этого.
Я закончил с гемом Escape , который имеет дополнительная функция использования кавычек по умолчанию и только экранирование обратной косой черты, когда это необходимо.
Вы также можете просто скопировать то, что хотите, из shellwords.rb в ствол репозитория Subversion Ruby (это GPLv2 ' d):
def shellescape(str)
# An empty argument will be skipped, so return empty quotes.
return "''" if str.empty?
str = str.dup
# Process as a single byte sequence because not all shell
# implementations are multibyte aware.
str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1")
# A LF cannot be escaped with a backslash because a backslash + LF
# combo is regarded as line continuation and simply ignored.
str.gsub!(/\n/, "'\n'")
return str
end