2012-02-23 20 views
3

可能性の重複:
Transliteration in rubyASCII以外のすべての文字をRubyのASCIIに置き換える最も簡単な方法は?

私はこれらのような文字列を変換する簡単な方法を探しています:

  • "SPASS" に "SPASS"
  • 」 「ueber」〜「ueber」
  • など

これは、人の名前から有効なユーザー名を生成するために必要です。

+2

ドイツ語のみ? _crêpes_のようなもので何をしたいのですか? 'ê'は単語の起源が_crespes_であることを意味します。 _naïveté_または_çava_はどうですか?別の場所によると、_ゲオルグ・フリードリヒ・ヘンデルは、ドイツ人によって「ヘンデル」に、そして英語で「ヘンデル」に簡略化されています(後者はロンドンに移ったときに彼が使用したスペルです)。どちらを選ぶ? – Phrogz

+0

[Rubyでの翻字]の複製(http://stackoverflow.com/questions/1726404/transliteration-in-ruby)と[RubyでのIconvによる字幕](http://stackoverflow.com/questions/4410340/transliteration- with-iconv-in-ruby) – Phrogz

答えて

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" 

iconvコマンドラインユーティリティもあります。そのことといくつかのRubyの例に関する詳細( 'ruby'を検索)here

これに代わる方法は、Unidecodeです。これは、当初のPerl実装に触発されていたと思います。私はRubyのインカネーションでそれを使用していませんが、マルチカーネルの拡張を行うべきです(明らかにあなたが望む)。

最後に、Railsを実行している場合、this threadが面白いかもしれません。それは、音訳への代替アプローチのいくつかの違いを詳述し、Railsコア内でこれを行う方法を示します(ActiveSupport::Inflector.transliterate

+0

+1いい回答です。私は前に "音訳"という言葉を知らなかったので、ありがとう!興味深いことに、überの変換がOPの望ましい結果と一致しないことを確認する。 OPが間違っているのですか?また、字句解析ライブラリも言語に依存しませんか? – Phrogz

+0

私はそれがあまりにも言語にとらわれないと思います。 Unidecodeディストリビューションには、少なくとも原則的に、より優れたマルチチャールの字体を詳細に記述したかなり大量のデータファイルが付属しています。 –

関連する問題