MxL*_*evs 5 encoding ruby-on-rails ruby-on-rails-4
我有一个应用程序,允许用户输入字符串,我解析它,将其存储在数据库中以供历史用途,然后返回一些消息。
在控制器中,这就是我构建消息的方式
@messages << name + " was not created"
Run Code Online (Sandbox Code Playgroud)
在视图中,这是它崩溃的线路
<% @messages.each do |msg| %>
<li> <b><%= msg %></b></li> <--- this line
<% end %>
Run Code Online (Sandbox Code Playgroud)
对这个问题进行搜索后得到了多种解决方案以及对问题发生原因的解释。我在几个地方正确处理编码:
当我在视图中注释掉“这一行”时,问题就消失了,但我不明白它出了什么问题。
如果我按照另一个建议写这个,它就会起作用
<li> <b><%= msg.force_encoding("utf-8") %></b></li>
Run Code Online (Sandbox Code Playgroud)
但我不喜欢它,因为理想情况下所有进入的内容都应该是 UTF-8 或正确转换为 UTF-8,并且视图可以假设它们渲染的所有内容都是正确的,所以我不必“强制”任何编码UTF-8。
我怀疑问题出在我连接字符串的方式上:
@messages << name + " was not created"
Run Code Online (Sandbox Code Playgroud)
如果我像这样进行强制编码
@messages.size.times do |i|
@messages[i] = @messages[i].force_encoding("UTF-8")
end
Run Code Online (Sandbox Code Playgroud)
这也有效。
连接字符串的正确方法是什么?
连接字符串的正确方法是什么?
使用#mb_charsEverywhere 似乎可以解决此类问题:
@messages << name.mb_chars + " was not created"
Run Code Online (Sandbox Code Playgroud)
和
<% @messages.each do |msg| %>
<li><b><%= msg.mb_chars %></b></li>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9887 次 |
| 最近记录: |