希望有人会帮助我:)
所以我在使用 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
但似乎它不会覆盖默认方法。那么有人可以告诉我,我做错了什么吗?