【问题标题】:Rails 3 Encoding::CompatibilityErrorRails 3 编码::CompatibilityError
【发布时间】:2010-11-04 01:34:29
【问题描述】:

我正在开发一个通过 ajax 提交法语翻译的 Rails 应用程序,由于某种原因,我在日志中不断收到以下错误:

Encoding::CompatibilityError incompatible character encodings: UTF-8 and ASCII-8BIT

有谁知道如何解决这个问题?

FIX:这适用于 WEBrick 服务器

# encode: UTF-8 放在要使用不同字符的每个文件的顶部

我无法让它在带有 Thin 的 Rails 服务器上工作......还有其他人遇到这个吗?

【问题讨论】:

    标签: ruby-on-rails utf-8 thin


    【解决方案1】:

    https://rails.lighthouseapp.com/projects/8994/tickets/4336-ruby19-submitted-string-form-parameters-with-non-ascii-characters-cause-encoding-errors

    上面的链接解决了我的问题。

    在发送翻译之前,在字符串上特别指定myString.force_encoding('UTF-8')

    将示例代码放在 Application_controller.rb 文件中,一切正常

    【讨论】:

    • +1 用于将必要的代码粘贴到答案中,可以节省其他人的时间
    • 代码就在那里,String.force_encoding('UTF-8') 是我见过的最好的解决方法。在将服务器从 1.8.7 升级到 1.9.2 之前没有问题
    【解决方案2】:

    我知道这很旧,但我遇到了同样的问题,解决方案在@dennismonsewicz 给出的链接中。详细来说,代码是:

    曾经:

    before_filter :force_utf8_params
    
      def force_utf8_params
        traverse = lambda do |object, block|
          if object.kind_of?(Hash)
            object.each_value { |o| traverse.call(o, block) }
          elsif object.kind_of?(Array)
            object.each { |o| traverse.call(o, block) }
          else
            block.call(object)
          end
          object
        end
        force_encoding = lambda do |o|
          o.force_encoding(Encoding::UTF_8) if o.respond_to?(:force_encoding)
        end
        traverse.call(params, force_encoding)
      end
    

    【讨论】:

      【解决方案3】:

      我通过将 utf8 文件转换为 ascii 来解决此问题。 在这里查看答案:ruby 1.9 + sinatra incompatible character encodings: ASCII-8BIT and UTF-8

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-08
        • 2011-12-03
        • 1970-01-01
        • 2014-05-28
        • 2013-01-04
        • 2011-07-04
        • 2011-08-01
        相关资源
        最近更新 更多