什么是在Ruby中用ASCII等价替换所有非ASCII字符的最简单方法?

Mar*_*sch 3 ruby string encoding

可能重复:
红宝石中的音译

我正在寻找一种简单的方法来转换这些字符串:

  • "spaß"到"spass"
  • "über"到"ueber"
  • 等等

这是从人名生成有效用户名所必需的.

Edu*_*nec 6

这称为音译.可以使用Iconv类来执行此近似(参见示例).

尝试以下之一(首先需要'iconv'):

Iconv.iconv('ascii//ignore//translit', 'utf-8', string).to_s
Iconv.iconv('ascii//translit', 'utf-8', string).to_s

irb(main):013:0> Iconv.iconv('ascii//translit', 'utf-8', 'spaß').to_s
=> "spass"
irb(main):014:0> Iconv.iconv('ascii//translit', 'utf-8', 'crêpes').to_s
=> "crepes"
irb(main):017:0> Iconv.iconv('ascii//translit', 'utf-8', 'über').to_s
=> "uber"
Run Code Online (Sandbox Code Playgroud)

还有一个iconv命令行实用程序.有关这方面的更多信息和一些Ruby示例(在这里搜索'ruby').

另一个替代方案是Unidecode,我猜这是受原始Perl实现的启发.我没有在它的Ruby化身中使用它,但它应该更好地进行多字符扩展(显然你想要).

最后,如果您正在运行Rails,您可能会发现此主题很有趣.它详细介绍了音译的替代方法之间的一些差异,并展示了在Rails核心中执行此操作的方法(ActiveSupport::Inflector.transliterate)