Rails 3.2.2
рубин 1.9.3
все браузеры я пытался (Aurora, IE, Chrome)
Windows 7Юникода неудачи в Rails более WEBrick
я любил быть в состоянии надежно передать Юникода назад и вперед между базой данных и клиентом. Насколько я мог сказать, он работает безупречно.
Однако это только создает проблему, с которой я испытываю еще большее раздражение. При работе в Rails со строковыми литералами, которые содержат различные специальные символы (в методе, определенном для модели, например), я заставляю Webrick полностью терпеть неудачу и возвращать ошибку 500 «Простите, но что-то случилось».
Например, предположим, что у меня есть строка «O₂». Я могу опубликовать это значение в форме и получить его позже, и все получится отлично. Но у меня есть метод
def fix_name molecule_name
fixed_name = molecule_name
case molecule_name
when 'O2' then fixed_name = 'O₂'
end
return fixed_name
end
Тогда, если я позвоню fix_name, даже если дело проваливается без согласования, сервер не может внезапно (сразу после того, говоря, что это успешно оказал общую страницу new.html).
Кроме того, при переходе на указания Юникода непосредственно, как в
def fix_name molecule_name
fixed_name = molecule_name
case molecule_name
when 'O2' then fixed_name = "O\x20\x82"
end
return fixed_name
end
Я получаю родовое «» символ вместо «₂».
У кого-нибудь еще была эта проблема? Что здесь может быть?
обновлен
Хорошо, будучи образованным себя немного лучше на Unicode и UTF-8, я могу быть немного меньше неандертальца об этом.
Исправление кода я отправил либо
def fix_name molecule_name
fixed_name = molecule_name
case molecule_name
when 'O2' then fixed_name = "O\xe2\x82\x82"
end
return fixed_name
end
или, возможно, лучше:
def fix_name molecule_name
fixed_name = molecule_name
case molecule_name
when 'O2' then fixed_name = "O\u{2082}"
end
return fixed_name
end
Таким образом, мораль есть, чтобы получить байт-код правильно!
Но это еще не объясняет, почему я не могу поставить буквальный символ.
Спасибо за ваш ответ. Добавление «волшебного комментария» было одной из многих вещей, которые я пытался добавлять и удалять в разных точках, но, видимо, я не делал этого правильно, потому что теперь, когда я добавляю его, он работает.Но моя внутренняя кодировка по умолчанию уже установлена на utf-8 - почему это не утверждает себя? –
Рад это слышать! ruby 1.9.3 не заботятся об этом; он должен быть в самом рубиновом файле, если этот файл имеет UTF в коде. –
Конечно, это имеет смысл. Спасибо за объяснение. –