2012-05-03 4 views
1

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 

Таким образом, мораль есть, чтобы получить байт-код правильно!

Но это еще не объясняет, почему я не могу поставить буквальный символ.

ответ

1

Руби 1.9.3 есть, скажем, «жесткий» о кодировке в ваших Р.Б. файлов.

http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/

http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings

короткий ответ, вы должны попробовать добавить:

# encoding: UTF-8 

в верхней части файла .rb, а затем рубин 1.9.3 не подавиться UTF символы в коде.

+0

Спасибо за ваш ответ. Добавление «волшебного комментария» было одной из многих вещей, которые я пытался добавлять и удалять в разных точках, но, видимо, я не делал этого правильно, потому что теперь, когда я добавляю его, он работает.Но моя внутренняя кодировка по умолчанию уже установлена ​​на utf-8 - почему это не утверждает себя? –

+1

Рад это слышать! ruby 1.9.3 не заботятся об этом; он должен быть в самом рубиновом файле, если этот файл имеет UTF в коде. –

+0

Конечно, это имеет смысл. Спасибо за объяснение. –