Rubyで文字を7ビットASCIIに音訳する現在の最良の方法は何ですか? 私が SO で見た質問のほとんどは 3 ~ 4 年前のものであり、解決策は完全には機能しません。
さまざまなラテン アルファベットで機能するメソッドが必要で、たとえば、convert
あなたの履歴書は百科事典ではない
に
あなたの履歴書は百科事典ではない
しかし、特に 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
そうでないものを処理することを好みます。