Methods RubyonRails中的UTF8修复-如何使用concat方法?
希望有人能帮助我:) 因此,当我在视图中使用utf8字符时,例如从db使用utf8编码时,我遇到了问题 我得到了这个错误: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
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