Ruby on rails 在Rails3中替换智能引号、智能撇号和省略号的最佳方法是什么?

Ruby on rails 在Rails3中替换智能引号、智能撇号和省略号的最佳方法是什么?,ruby-on-rails,ruby-on-rails-3,utf-8,character-encoding,Ruby On Rails,Ruby On Rails 3,Utf 8,Character Encoding,我的应用程序允许用户输入文本。当他们从MS Word复制和粘贴时,它会粘贴智能引号、智能撇号和省略号。这些字符会被保存到数据库中并导致问题。用普通引号(“)、撇号(')和句点(…)替换这些非UTF-8字符的最佳方法是什么 另外,如何测试此功能?我添加了一个带有这些特殊字符的测试,并在文件顶部添加了编码:ISO-8859-1。这些特殊字符导致测试停止运行:/home/george/.rvm/gems/ruby-1.9.2-p180/gems/redgreen-1.2.2/lib/redgreen.

我的应用程序允许用户输入文本。当他们从MS Word复制和粘贴时,它会粘贴智能引号、智能撇号和省略号。这些字符会被保存到数据库中并导致问题。用普通引号(“)、撇号(')和句点(…)替换这些非UTF-8字符的最佳方法是什么

另外,如何测试此功能?我添加了一个带有这些特殊字符的测试,并在文件顶部添加了编码:ISO-8859-1。这些特殊字符导致测试停止运行:
/home/george/.rvm/gems/ruby-1.9.2-p180/gems/redgreen-1.2.2/lib/redgreen.rb:62:in'sub':UTF-8中的字节序列无效(ArgumentError)
…显然,红绿宝石与这些字符不兼容


谢谢。

您可以添加一个before_save方法,该方法将文本转换为UTF-8对应字符。如果您只有一个字段可能包含非UTF8字符,那么它很简单,如果您有许多字段,则最好动态迭代更改的文本/字符串字段并修复UTF-8问题。无论哪种方法,您都需要使用.H这里有一个例子

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 handy changed?helpers检查字段是否已更改。

如果这些字符是“非UTF-8”字符,则无法将其保存在UTF-8编码字符串中。不,它们是非常多的Unicode字符!
例如U+201C。它们不是您想要的字符(
U+0022)。问题可能正是因为您使用的是
#编码:ISO-8859-1
而不是UTF-8。遗憾的是,这并没有实际替换此字符:
这并没有实际用正确的字符替换字符。它只是去除了坏字符。例如,Microsoft“应替换为”,但它只是将其删除。