Помогите разобраться со скриптом конвертера валют

Больше
11 года 1 мес. назад - 11 года 1 мес. назад #79442 от TimkaVs
Начал изучение самого языка руби, вот дошёл до практикума, нужно сделать конвертер четырёх валют с помощью case...end
Пишу и проверяю код на Aptana Studio 3.
Начал значит писать код.

puts "Конвертер валют приветствует вас.
Введите интересующую вас валюту. Доллар. Рубль. Евро Гривна"
vib=gets.chomp
case vib
when "Доллар" then
print "10 долларов"
else
print "херня"
end

с кейсом первый раз работаю, поэтому прежде чем писать от и до, я проверил что будет если переменная vib будет равняться "Доллар", по моей идеи должно показать сообщение 10 долларов. Если бы так и было, то вопроса не возникло. Но почему то запуская программу, я пишу Доллар, выдаёт else "херня". Если в when "Доллар" then, "доллар" изменить на "dol", и после запуска программы, ввести dol, то выдаёт нужную строку "10 долларов".
не могу понять в чем ошибка или проблема(
Последнее редактирование: 11 года 1 мес. назад пользователем AnnTenna. Причина: пожалуйста, указывай названия точнее!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 1 мес. назад #79443 от Iren_Rin
Подозреваю что ты сидишь под руской виндой, и видимо введенный текст будет закодирован в Windows-1251. Твоя же оптана, видимо, работает в utf-8 по умолчанию. Переведи полученную строку в utf-8 - должно помочь.
Code:
vib = gets.chomp.encode('utf-8')

P.S. - в руби не обязательно писать then в case и if
Спасибо сказали: MaltonTheWarrior

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 1 мес. назад - 11 года 1 мес. назад #79444 от TimkaVs
добавил что ты написал, всё равно не работает. Зашёл в настройки, стоит utf-8
Последнее редактирование: 11 года 1 мес. назад пользователем TimkaVs.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 1 мес. назад #79445 от TimkaVs
Не знаю влияет ли на что нибудь, сижу с windows 10

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 1 мес. назад #79446 от EvilCat
Чтобы вовсе исключить из уравнения кодировку, можно написать:
Code:
when 'доллар', 'dollar', '$'

...и попробовать ввести dollar. Если тогда всё сработает как надо - значит, какая-то морока с кодировкой.
Спасибо сказали: DeadElf79

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 1 мес. назад #79447 от DeadElf79
нет, все норм, та же фигня и на другой винде:
[IMG


пойду копать мануалы по этому поводу.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 1 мес. назад #79451 от Iren_Rin
Если запускать руби файл из консоли (под виндой), то строка приходит в IBM866 (консоль винды - она такая, с приветом :) ), и перевод в UTF-8 решает проблему. Подумал, что возможно аптана коряво настроена из коробки, так что пришлось даже ее скачать и поставить и запустить файл уже из под нее. В итоге оказалось, что в Encoding.default_external у нее стоит Windows-1251, что вроде логично. Но на самом же деле, строка в gets приходит уже переведенная в юникод. Строки в руби - это последовательность байтов плюс кодировка. Последовательность байтов приходит как для строки в юникоде, но кодировка стоит неверная.

Есть два решения
Code:
Encoding.default_encoding = 'utf-8' #ИЛИ s = gets.chop.forse_encoding 'utf-8'
Спасибо сказали: DeadElf79, Ren310, TimkaVs

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.106 секунд
Работает на Kunena форум