Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Methods RubyonRails中的UTF8修复-如何使用concat方法?_Methods_Overriding_Activesupport - Fatal编程技术网

Methods RubyonRails中的UTF8修复-如何使用concat方法?

Methods RubyonRails中的UTF8修复-如何使用concat方法?,methods,overriding,activesupport,Methods,Overriding,Activesupport,希望有人能帮助我:) 因此,当我在视图中使用utf8字符时,例如从db使用utf8编码时,我遇到了问题 我得到了这个错误: incompatible character encodings: ASCII-8BIT and UTF-8 顺便说一句,从db编码并不是一个问题。。 不管怎样,我找到了解决问题的办法,就是改变方法 Ruby193\lib\ruby\gems\1.9.1\gems\activesupport-3.2.6\lib\active_support\core_ext\string

希望有人能帮助我:)

因此,当我在视图中使用utf8字符时,例如从db使用utf8编码时,我遇到了问题

我得到了这个错误:

incompatible character encodings: ASCII-8BIT and UTF-8
顺便说一句,从db编码并不是一个问题。。 不管怎样,我找到了解决问题的办法,就是改变方法

Ruby193\lib\ruby\gems\1.9.1\gems\activesupport-3.2.6\lib\active_support\core_ext\string\output_safety.rb
我改变的方法是“concat”。所以我改变了这个方法:

def concat(value)
  if !html_safe? || value.html_safe?
    super(value)
  else
    super(ERB::Util.h(value))
  end
end
alias << concat
使用此代码:

module ActiveSupport #:nodoc:
  class SafeBuffer < String
    def self.concat(value)
      value = (value).force_encoding('UTF-8')
      puts "--------------------------------"
      puts "Loaded concat in utf8fix.rb"
      puts "--------------------------------"
      if !html_safe? || value.html_safe?
        super(value)
      else
        super(ERB::Util.h(value))
      end
    end
    alias << concat
  end
end
module-ActiveSupport#:nodoc:
类SafeBuffer<字符串
def自身浓度(值)
value=(value).force_编码('UTF-8')
放入“-------------------------------------”
将“加载的concat放入utf8fix.rb”
放入“-------------------------------------”
如果!html|u安全?|value.html\u安全吗?
超级(价值)
其他的
super(ERB::Util.h(值))
结束
结束
别名因为“concat”不是类方法,所以在它之前我不需要self,所以这就是我的问题

已解决的更改:

def self.concat(value)
致:

因为“concat”不是类方法,所以在它之前我不需要self,所以这就是我的问题

已解决的更改:

def self.concat(value)
致:


上述答案的一些修正:

module ActiveSupport #:nodoc:
    class SafeBuffer < String
        def concat(value)
          if value.is_a?String
            value = value.dup if value.frozen?
            value = (value).force_encoding('UTF-8')
            puts "--------------------------------"
            puts "Loaded concat in utf8fix.rb"
            puts "--------------------------------"
          end
          if !html_safe? || value.html_safe?
            super(value)
          else
            super(ERB::Util.h(value))
          end
      end
      alias << concat
    end
  end
module-ActiveSupport#:nodoc:
类SafeBuffer<字符串
def浓度(值)
if value.是一个字符串吗
value=value.dup如果value.freezed?
value=(value).force_编码('UTF-8')
放入“-------------------------------------”
将“加载的concat放入utf8fix.rb”
放入“-------------------------------------”
结束
如果!html|u安全?|value.html\u安全吗?
超级(价值)
其他的
super(ERB::Util.h(值))
结束
结束

alias上述答案的一些修正:

module ActiveSupport #:nodoc:
    class SafeBuffer < String
        def concat(value)
          if value.is_a?String
            value = value.dup if value.frozen?
            value = (value).force_encoding('UTF-8')
            puts "--------------------------------"
            puts "Loaded concat in utf8fix.rb"
            puts "--------------------------------"
          end
          if !html_safe? || value.html_safe?
            super(value)
          else
            super(ERB::Util.h(value))
          end
      end
      alias << concat
    end
  end
module-ActiveSupport#:nodoc:
类SafeBuffer<字符串
def浓度(值)
if value.是一个字符串吗
value=value.dup如果value.freezed?
value=(value).force_编码('UTF-8')
放入“-------------------------------------”
将“加载的concat放入utf8fix.rb”
放入“-------------------------------------”
结束
如果!html|u安全?|value.html\u安全吗?
超级(价值)
其他的
super(ERB::Util.h(值))
结束
结束

别客气。请详细说明你的答案。告诉你的建议,并解释为什么它是正确的解决方案。重写方法可能无法获得预期的字符串类型,因此我将.is_a放入检测。否则,一切都不会改变。另一个问题是字符串可能冻结,所以我创建了一个克隆来处理UTF8转换。欢迎继续。请详细说明你的答案。告诉你的建议,并解释为什么它是正确的解决方案。重写方法可能无法获得预期的字符串类型,因此我将.is_a放入检测。否则,一切都不会改变。另一个问题是字符串可能冻结,因此我创建了一个克隆来处理UTF8转换。
module ActiveSupport #:nodoc:
    class SafeBuffer < String
        def concat(value)
          if value.is_a?String
            value = value.dup if value.frozen?
            value = (value).force_encoding('UTF-8')
            puts "--------------------------------"
            puts "Loaded concat in utf8fix.rb"
            puts "--------------------------------"
          end
          if !html_safe? || value.html_safe?
            super(value)
          else
            super(ERB::Util.h(value))
          end
      end
      alias << concat
    end
  end