在控制器中,这是我构建消息的方式
@messages << name + " was not created"
在视图中,这是它崩溃的线
<% @messages.each do |msg| %> <li> <b><%= msg %></b></li> <--- this line<% end %>
对问题进行搜索后,可以找到解决问题原因的几种解决方案和解释.
我在几个地方正确处理编码:
>我的应用程序默认情况下将事物转换为UTF8.
>当我输入中文字符并在控制器中呈现特定标记时,它会显示我输入的内容.
>当我渲染上面的连接字符串时,它会显示正确的字符串
>数据库设置为UTF-8编码
>其他页面能够正确呈现文本(它们从数据库中获取并直接显示它,而不需要任何类型的字符串 *** 作)
当我在视图中注释掉“this line”时,问题就消失了,但我不明白它有什么问题.
如果我写这个,按照另一个建议,它的工作原理
<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
这也有效.
什么是连接字符串的正确方法?
解决方法What is the proper way to concantenate strings?
在任何地方使用#mb_chars似乎解决了这样的问题:
@messages << name.mb_chars + " was not created"
和
<% @messages.each do |msg| %> <li><b><%= msg.mb_chars %></b></li><% end %>总结
以上是内存溢出为你收集整理的ruby-on-rails – Rails 4:不兼容的字符编码:UTF-8和ASCII-8BIT全部内容,希望文章能够帮你解决ruby-on-rails – Rails 4:不兼容的字符编码:UTF-8和ASCII-8BIT所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)