Ruby方法从UTF-8国际字符中删除重音符号

我正在尝试创build一个string的“标准化”副本,以帮助减less数据库中的重复名称。 名称包含许多国际字符(即重音字母),我想创build一个删除了重音的副本。

我遇到下面的方法,但不能得到它的工作。 我似乎无法findUnicode Hacks插件是什么。

# Utility method that retursn an ASCIIfied, downcased, and sanitized string. # It relies on the Unicode Hacks plugin by means of String#chars. We assume # $KCODE is 'u' in environment.rb. By now we support a wide range of latin # accented letters, based on the Unicode Character Palette bundled inMacs. def self.normalize(str) n = str.chars.downcase.strip.to_s n.gsub!(/[à áâãäåÄÄ?]/u, 'a') n.gsub!(/æ/u, 'ae') n.gsub!(/[ÄÄ?]/u, 'd') n.gsub!(/[çÄ?ÄÄ?Ä?]/u, 'c') n.gsub!(/[èéêëÄ?Ä?Ä?Ä?Ä?]/u, 'e') n.gsub!(/Æ?/u, 'f') n.gsub!(/[ÄÄ?Ä¡Ä£]/u, 'g') n.gsub!(/[ĥħ]/, 'h') n.gsub!(/[ììÃîïīĩÄ]/u, 'i') n.gsub!(/[įıijĵ]/u, 'j') n.gsub!(/[ķĸ]/u, 'k') n.gsub!(/[Å?ľĺļÅ?]/u, 'l') n.gsub!(/[ñÅ?Å?Å?Å?Å?]/u, 'n') n.gsub!(/[òóôõöøÅÅ?ÅÅ]/u, 'o') n.gsub!(/Å?/u, 'oe') n.gsub!(/Ä?/u, 'q') n.gsub!(/[Å?Å?Å?]/u, 'r') n.gsub!(/[Å?Å¡Å?ÅÈ?]/u, 's') n.gsub!(/[ťţŧÈ?]/u, 't') n.gsub!(/[ùúûüūůűÅũų]/u,'u') n.gsub!(/ŵ/u, 'w') n.gsub!(/[ýÿŷ]/u, 'y') n.gsub!(/[žżź]/u, 'z') n.gsub!(/\s+/, ' ') n.gsub!(/[^\sa-z0-9_-]/, '') n end 

我是否需要“需要”特定的图书馆/gem? 或者也许有人可以推荐另一种方式去做这件事。

我不使用Rails,也不打算这样做。

我通常使用I18n来处理这个问题:

 1.9.3p392 :001 > require "i18n" => true 1.9.3p392 :002 > I18n.transliterate("Hé les mecs!") => "He les mecs!" 

到目前为止,以下是我能够完成我所需要的唯一方法:

 str.tr( "ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž", "AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz") 

但使用这个感觉非常“黑客”,我很想find一个更好的方法。