我想使用 Ruby 1.9.3 将重音 UTF-8 字符替换为它们的 ASCII 等效字符。例如,
Acsády --> Acsady
执行此操作的传统方法是使用 IConv 包,它是 Ruby 标准库的一部分。你可以这样做:
str = 'Acsády'
IConv.iconv('ascii//TRANSLIT', 'utf8', str)
哪个会产生
Acsa'dy
然后必须删除撇号。虽然这种方法在 Ruby 1.9.3 中仍然有效,但我收到一条警告说IConv is deprecated and that String#encode should be used instead
. 但是,String#encode
不提供完全相同的功能。默认情况下,未定义的字符会抛出异常,但您可以通过设置 :undef=>:replace (将未定义的字符替换为默认的 '?' 字符)或 :fallback 选项到将未定义的源编码字符映射到的哈希值来处理它们目标编码。我想知道标准库中或通过某些 gem 是否有标准的 :fallback 哈希,这样我就不必编写自己的哈希来处理所有可能的重音符号。
@raina77ow:感谢您的回复。这正是我一直在寻找的。但是,在查看您链接到的线程后,我意识到更好的解决方案可能是简单地将非重音字符与其重音等价物匹配,就像数据库使用字符集排序规则一样。Ruby 有什么等同于排序规则的东西吗?