我的应用允许用户输入文本。当他们从MS Word中复制粘贴时,它会粘贴智能引号、智能撇号和省略号。这些字符被保存到数据库中并引起问题。用正常的引号(")、撇号(')和句号(…)代替这些非utf -8字符的最佳方法是什么?
还有,你如何测试这个功能?我在文件的顶部添加了一个带有这些特殊字符和# encoding: ISO-8859-1
的测试。导致测试停止运行的特殊字符:/home/george/.rvm/gems/ruby-1.9.2-p180/gems/redgreen-1.2.2/lib/redgreen.rb:62:in 'sub': invalid byte sequence in UTF-8 (ArgumentError)
…显然红绿宝石与这些角色不相容…?
谢谢。
您可以添加一个before_save方法,该方法将文本转换为UTF-8对应的字符。如果你只有一个可能包含非utf8字符的字段,那么它很简单,如果你有很多字段,那么如果你动态迭代改变的文本/字符串字段并修复UTF-8问题会更好。无论哪种方式,您都需要使用string# encode。下面是一个例子
before_save :fix_utf8_encoding
def fix_utf8_encoding
columns = self.class.columns.select{|col| [:text,:string].include?(col.type)}.map{|col| col.name.to_sym}
columns.each do |col|
self[col] = self.self[col].encode('UTF-8', :invalid => :replace, :undef => :replace) if self[col].kind_of?(String) #Double checking just in case.
end
end
private :fix_utf8_encoding
对于奖励点,您还可以检查字段是否使用rails更改?