Проблемы, с которыми вы столкнулись, вызваны неразрывными пробелами (Unicode U + 00A0) на странице.
В вашей первой задаче строка:
"Nove36 "
на самом деле заканчивается U + 00A0, а String#strip!
не считает этот символ пробелом для удаления:
1.9.3-p125 :001 > s = "Foo \u00a0"
=> "Foo "
1.9.3-p125 :002 > s.strip
=> "Foo " #unchanged
В вашей второй проблеме пробел между ценой и знаком евро снова является неразрывным пробелом, поэтому регулярное выражение просто не совпадает с поиском нормального пробела:
# s as before
1.9.3-p125 :003 > s =~ /Foo / #2 spaces, no match
=> nil
1.9.3-p125 :004 > s =~ /Foo / #1 space, match
=> 0
1.9.3-p125 :005 > s =~ /Foo \u00a0/ #space and non breaking space, match
=> 0
Когда вы копируете и вставляете исходный код, браузер, вероятно, нормализует неразрывные пробелы, поэтому вы копируете только символ обычного пробела, поэтому он работает таким образом.
Простейшим решением будет глобальная замена пространства \u00a0
перед началом обработки:
sio = open(url)
@cur_encoding = sio.charset
txt = sio.read #read the whole file
txt.gsub! "\u00a0", " " #global replace
doc = Nokogiri::HTML(txt, nil, @cur_encoding) #use this new string instead...