在Ruby中清理Word中的“智能”字符

时间:2010-09-29 01:58:43

标签: ruby ms-word special-characters smart-quotes

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

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

是否有任何Ruby函数或库可以将这些函数或库映射到它们的ASCII(近似)等价物中,或者我真的只需要做一堆手动gsubs吗?

2 个答案:

答案 0 :(得分:2)

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

您可以使用iconv音译为最接近的ASCII等效或简单的gsubtr来电。詹姆斯格雷有一些blogs关于在各种角色集之间进行转换,以显示如何进行音译。

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

答案 1 :(得分:0)

有些gsub听起来是最好的选择,特别是如果你计划加载一个额外的库来做基本相同的事情。