2012-04-10 3 views
0

Метод Rails gsub из NumberHelper показывает символы до unicode '\ u20B8', но не отображает символ '\ u20B9'.Rails gsub не отображает символ для u20B9 (символ рупии)

Rails - 3.0.5 Рубин - 1.9.2-p0

В консоли Rails, выполните следующие действия:

ruby-1.9.2-p0 > value = "123.45" 
=> "123.45" 
ruby-1.9.2-p0 > unit = "\u20B9" 
=> "\u20B9" 
ruby-1.9.2-p0 > puts unit 
₹ 
=> nil 
ruby-1.9.2-p0 > format = "%u %n" 
=> "%u %n" 
ruby-1.9.2-p0 > format.gsub(/%n/, value).gsub(/%u/, rup) 
=> "\u20B9 123.45" 
ruby-1.9.2-p0 > format.gsub(/%n/, value).gsub(/%u/, "\u20B8") 
=> "₸ 123.45" 
ruby-1.9.2-p0 > 

Пожалуйста, советы, почему это поведение с GSUB?

+0

Кстати, gsub не из NumberHelper, его основного метода в классе Ruby String. – d11wtq

+0

yep true. это была ошибка типографии, я хотел упомянуть number_from_currency от NumberHelper, а затем, наконец, просверлил, что gsub, используемый в number_from_currency, является тем, который неправильно печатает символ –

ответ

0

Я не понимаю, в чем проблема. Это делается точно так, как вы ожидаете. IRB показывает вам вывод #inspect, который выдает строку с кавычками и escape-последовательность unicode. Просто puts это на самом деле увидеть, что оказывается:

>> unit = "\u20B9" 
=> "₹" 
>> value = "123.45" 
=> "123.45" 
>> format = "%u %n" 
=> "%u %n" 
>> puts format.gsub(/%n/, value).gsub(/%u/, unit) 
₹ 123.45 
=> nil 

выше, является прямой от монтировки сессии.

EDIT | Также обратите внимание, что использование вами #gsub нечетно. Вы можете использовать строку формата для того, что вы делаете:

>> puts "%s %.2f" % [unit, value] 
=> ₹ 123.45 
+0

Хм, помещает это. –

+0

Вы «ставили» это, или вы просто позволили IRB вывести его для вас? См. Мою заметку о '# inspect'. – d11wtq

+0

Спасибо, что делает печать символа. –