【问题标题】:better alternative in letters substitution字母替换的更好选择
【发布时间】:2011-01-11 05:07:27
【问题描述】:

有没有更好的选择?

name.gsub('è','e').gsub('à','a').gsub('ò','o').gsub('ì','i').gsub('ù','u')

谢谢

【问题讨论】:

  • 这听起来是个坏主意。为什么要删除重音符号?此外,大约有 10 种不同的方式来重读 Unicode 中的字母。您只显示重音。
  • 请参阅:en.wikipedia.org/wiki/Diacritic,了解您可能错过的不同标记的列表。
  • 同意JG。不管是什么要求不带重音的字符都是错误的。
  • 对我来说似乎是 stackoverflow.com/questions/225471/… 的副本
  • @Ben:这正是我的观点。这些字符被视为平等。

标签: ruby-on-rails ruby


【解决方案1】:
substitutes = {'è'=>'e', 'à'=>'a', 'ò'=>'o', 'ì'=>'i', 'ù'=>'u'}
substitutes.each do |old, new| 
    name.gsub!(old, new)
end

或者您可以使用an extension of String such as this one 为您完成。

【讨论】:

    【解决方案2】:

    使用tr

    也许像string.tr('èàòìù', 'eaoiu')

    【讨论】:

      【解决方案3】:

      如果您真的想要一个完整的解决方案,请尝试从Perl's Unidecode module 中提取表格。将这些表转换为 Ruby 后,您需要遍历输入的每个字符,将表的值替换为该字符。

      【讨论】:

        【解决方案4】:

        在黑暗中大胆尝试,但是如果您因为使用的是旧版文本编码格式而尝试删除重音字符,则应该查看Iconv

        关于该主题的精彩介绍:http://blog.grayproductions.net/articles/encoding_conversion_with_iconv

        【讨论】:

          【解决方案5】:

          如果您想知道您想要做的技术术语是大小写折叠和可能的 Unicode 规范化(有时是排序规则)。

          这里是a case folding configuration for ThinkingSphinx,让您了解您需要担心多少个字符。

          【讨论】:

            【解决方案6】:

            如果 JRuby 是一个选项,请参阅我的问题的答案:

            How do I detect unicode characters in a Java string?

            它使用规范器处理从字母中删除重音。您可以从 JRuby 访问该类。

            【讨论】:

              猜你喜欢
              • 2016-02-03
              • 1970-01-01
              • 2017-11-05
              • 2016-12-22
              • 1970-01-01
              • 2014-02-16
              • 2017-05-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多