希望有人能帮助我:)。
所以当我在视图中使用utf8字符时,我遇到了utf8编码问题,例如,来自db ..
我收到了这个错误:
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
到此:
def concat(value)
value = (value).force_encoding('UTF-8')
if !html_safe? || value.html_safe?
super(value)
else
super(ERB::Util.h(value))
end
end
alias << concat
但是当然这是一个坏主意,因为该应用程序不会在其他服务器上运行..
所以我想从我的初始化器中覆盖这个方法,所以我创建了:
config/initializers/utf8_fix.rb
使用此代码:
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
但似乎dosnt覆盖了默认方法。那么有人能告诉我,我做错了什么?
答案 0 :(得分:1)
由于“concat”不是类方法,所以我不需要自我,所以这就是我的问题..
解决了改变:
def self.concat(value)
为:
def concat(value)
答案 1 :(得分:0)
上述答案的一些解决方法:
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