2013-11-24 2 views
4

У меня есть приложение, которое позволяет пользователям вводить строку, обрабатывать ее, хранить в базе данных в исторических целях и возвращать некоторые сообщения.Rails 4: несовместимые кодировки символов: UTF-8 и ASCII-8BIT

В контроллере, это то, как я строю сообщения

@messages << name + " was not created" 

По мнению, это линия, что это сбой на

<% @messages.each do |msg| %> 
    <li> <b><%= msg %></b></li> <--- this line 
<% end %> 

Выполнение поиска по этому вопросу привели несколько решения и объяснения причин возникновения проблемы. Я правильно обрабатываю кодировку в нескольких местах:

  • Мое приложение по умолчанию преобразует вещи в UTF8.
  • Когда я набираю в китайских иероглифах и оказываю конкретный маркер в контроллере, он показывает, что я напечатал.
  • Когда я вынести сцепленную строку выше, показывает правильную строку
  • баз данных устанавливаются в UTF-8 кодирование
  • Другие страницы способны правильно отображать текст (они выборки из базы данных и отобразить его непосредственно, без каких-либо манипуляций со строками с моей стороны)

проблема исчезает, когда я закомментировать " эта строка "в представлении, но я не понимаю, что не так с Это.

Если я пишу это, следуя другое предложение, он работает

<li> <b><%= msg.force_encoding("utf-8") %></b></li> 

Но мне не нравится это, потому что я не должен быть с «заставить» любые кодировки, когда в идеале все, что происходит в должно быть UTF-8 или правильно преобразован в UTF-8, и представления могут считать, что все, что они представляют, являются правильными UTF-8.

Я подозреваю, что проблема в том, как я конкатенации строки:

@messages << name + " was not created" 

Если я кодировку силы, как этот

@messages.size.times do |i| 
    @messages[i] = @messages[i].force_encoding("UTF-8") 
end 

Это также работает.

Каков подходящий способ контингации строк?

+0

ваш взгляд файл кодировки в UTF-8? – medBo

+0

Вы имеете в виду кодировку файла? Да, это UTF-8, но я не уверен, почему это изменило бы ситуацию. – MxyL

+1

Эта статья может помочь вам: http: // yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails /, честно говоря, я его не читаю, но, похоже, у него отличные вещи о кодировании:), если вы найдете что-то полезное, скажите мне – medBo

ответ

1

Каков правильный способ контингации строк?

Использование #mb_chars везде кажется решить такого рода вопросов:

@messages << name.mb_chars + " was not created" 

И

<% @messages.each do |msg| %> 
    <li><b><%= msg.mb_chars %></b></li> 
<% end %> 
Смежные вопросы