2016-09-09 3 views
3

ëのような文字を普通のeに変換したいと思います。私は言語と人が都市をどのように入力するかに関して、変換を目指しています。たとえば、Brasiliaの代わりにBrasiliaを検索すると、ほとんどの人が実際に入力します。そしてRuetersのような報道機関がBrasiliaについて報告するとき、彼らは通常Brasiliaを綴る。もう一度、宝石(または文字エンコーディングの数学/方法を探しているのはおそらく、その答えが他の言語で参照できるので、おそらくもっと良いでしょう)を探してください。Rubyでは、ë、à、é、äのような特殊文字をすべてe、a、e、aに変換する方法は?

これは、一般的な「拡張ASCII」文字セットを処理するためのものです。注:私は標準のUnicode文字列で作業しています。

+0

は、「A」は "になった場合は「aa」または「a」? –

答えて

10

ルビー2.2以降では、String#unicode_normalizenormalizeにUnicode文字列があります。文字が有効なASCIIコードポイントで、句読点がない、これは後者を除去するために使用することができるので

'ë'.unicode_normalize(:nfkd).chars 
#=> ["e", "̈"] 
# ^^
# char punctuation 

:NFKDフォームは、文字や句読点を分離

'ë,à,é,ä'.unicode_normalize(:nfkd).encode('ASCII', replace: '') 
#=> "e,a,e,a" 
+0

すべての文字 ''± 's' .unicode_normalize(:nfkd).encode( 'ASCII' '')=> "az" 'を置き換えてください。 'I18n.transliterate'はいくつかの言語でうまく機能します。 –

9

I18n#transliterateを探している可能性があります。

宝石はhereです。gem install i18nでインストールしてください。

例:

irb(main):001:0> require 'i18n' 
=> true 
irb(main):002:0> I18n.enforce_available_locales = false 
=> false 
irb(main):003:0> I18n.transliterate("ë,à,é,ä") 
=> "e,a,e,a" 
+0

これは、I18n.transliterate( "±łż")=> "alz"のために正解でなければなりません。 –

関連する問題