0

我需要清理用户输入中的各种 Word“智能”字符,包括但不限于以下内容:

– EN DASH
‘ LEFT SINGLE QUOTATION MARK
’ RIGHT SINGLE QUOTATION MARK

是否有任何 Ruby 函数或库可以将它们映射到它们的 ASCII(接近)等价物,还是我真的需要做一堆手动 gsub?

4

2 回答 2

2

HTMLEntities gem会将实体解码为 UTF-8。

您可以使用iconv音译为最接近的 ASCII 等价物或简单的gsubortr调用。James Gray 有一些关于在各种字符集之间转换的博客,展示了如何进行音译。

require 'htmlentities'

chars = [
  '–', # EN DASH
  '‘', # LEFT SINGLE QUOTATION MARK
  '’'  # RIGHT SINGLE QUOTATION MARK
]

decoder = HTMLEntities.new('expanded')
chars.each do |c|
  puts "#{ c } => #{ decoder.decode(c) } => #{ decoder.decode(c).tr('–‘’', "-'")} => #{ decoder.decode(c).encoding }"
end

# >> – => – => - => UTF-8
# >> ‘ => ‘ => ' => UTF-8
# >> ’ => ’ => ' => UTF-8
于 2011-03-03T05:22:50.837 回答
0

一些 gsubs 听起来是最好的选择,特别是如果您打算加载整个额外的库来做基本相同的事情。

于 2010-09-30T01:32:40.467 回答