gpt4 book ai didi

ruby-on-rails - rails 4 : incompatible character encodings: UTF-8 and ASCII-8BIT

转载 作者:行者123 更新时间:2023-12-04 06:33:09 25 4
gpt4 key购买 nike

我有一个应用程序,它允许用户输入一个字符串,我解析它,将它存储在数据库中用于历史目的,并返回一些消息。

在 Controller 中,这就是我构建消息的方式

@messages << name + " was not created" 

在 View 中,这是它崩溃的那条线
<% @messages.each do |msg| %>
<li> <b><%= msg %></b></li> <--- this line
<% end %>

对该问题进行搜索得到了多种解决方案和对问题发生原因的解释。
我在几个地方正确处理编码:
  • 我的应用程序默认将内容转换为 UTF8。
  • 当我输入中文字符并在 Controller 中呈现特定标记时,它会显示我输入的内容。
  • 当我呈现上面的连接字符串时,它显示正确的字符串
  • 数据库设置为 UTF-8 编码
  • 其他页面能够正确呈现文本(它们从数据库中获取并直接显示它,而无需我进行任何类型的字符串操作)

  • 当我在 View 中注释掉“这一行”时,问题就消失了,但我不明白它有什么问题。

    如果我按照另一个建议写这个,它会起作用
    <li> <b><%= msg.force_encoding("utf-8") %></b></li>

    但我不喜欢它,因为当理想情况下所有输入的内容都应该是 UTF-8 或正确转换为 UTF-8 时,我不应该“强制”任何编码,并且 View 可以假设它们呈现的所有内容都是正确的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 : incompatible character encodings: UTF-8 and ASCII-8BIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179319/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com