加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 4:不兼容的字符编码:UTF-8和ASCII-8BI

发布时间:2020-12-17 02:05:37 所属栏目:百科 来源:网络整理
导读:我有一个应用程序,允许用户输入一个字符串,我解析它,将其存储在数据库中用于历史目的,并返回一些消息. 在控制器中,这是我构建消息的方式 @messages name + " was not created" 在视图中,这是它崩溃的线 % @messages.each do |msg| % li b%= msg %/b/li --- t
我有一个应用程序,允许用户输入一个字符串,我解析它,将其存储在数据库中用于历史目的,并返回一些消息.

在控制器中,这是我构建消息的方式

@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 %>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读