在Ruby中将字符转换为7位ASCII的最佳方法是什么?我在SO上看到的大多数问题都是3或4年前的问题,解决方案并不完全有效。
我想要一个方法,将工作范围广泛的拉丁字母,例如,转换
你的简历不是百科全书
至
你的简历不是百科全书
但是我找不到一种方法来实现这一点,特别是将8位ASCII折叠成7位ASCII。
s = "Your r\u00e9sum\u00e9\u2019s a non\u2013encyclop\u00e6dia"
puts Iconv.iconv('ascii//ignore//translit', 'utf-8', s)
# => Your r'esum'e's a non-encyclopaedia
puts s.encode('ascii//ignore//translit', 'utf-8')
# => Encoding::ConverterNotFoundError: code converter not found (UTF-8 to ascii//ignore//translit)
puts s.encode('ascii', 'utf-8')
# Encoding::UndefinedConversionError: U+00E9 from UTF-8 to US-ASCII
puts s.encode('ascii', 'utf-8', invalid: :replace, undef: :replace)
# Your r?sum??s a non?encyclop?dia
puts I18n.transliterate(s)
# Your resume?s a non?encyclopaedia
字符串
由于Iconv
已被弃用,如果没有必要,我宁愿不使用它,但如果这是唯一有效的方法,我会这样做。显然,我可以将自定义的8位ASCII转换为7位ASCII,但我更喜欢使用经过全面测试的支持解决方案。
International Components for Unicode通过其Latin-ASCII转换可以很好地处理转换,但这仅适用于Java和C。
更新
我最终做的是编写自己的字符翻译例程来处理标点符号和空格,然后我可以使用I18n.transliterate
来完成其余的工作。我仍然更喜欢找到并使用维护良好的库函数来处理I18n
没有处理的东西。
3条答案
按热度按时间gywdnpxw1#
如果你愿意添加一些重依赖项(除非你已经在Rails上),ActiveSupport支持(双关语不是故意的):
字符串
这适用于所有的字母。但它还不能正确处理撇号。
agxfikkp2#
我想removeaccents script正是你想要的。
也许UnicodeUtils gem会有用,但只能用于删除重音(而不是转换
æ
AFAIK之类的东西)。5n0oy7gb3#
适用于任何区域设置:
字符串