2010-09-29 44 views
0

字符我需要清理各種字「智能」字符的用戶輸入,包括但不限於以下內容:清理「智能」從Word中的Ruby

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

是否有任何的Ruby的功能或庫將它們映射到它們的ASCII(近似)等價物,還是我真的需要做一堆手動gsubs?

回答

2

HTMLEntities gem會將實體解碼爲UTF-8。

您可以使用iconv音譯爲最接近的ASCII等效或簡單的gsubtr調用。 James Gray有一些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 
0

一些gsubs聽起來像是最好的選擇,特別是如果你打算加載一個額外的庫來做基本相同的事情。