10

非常によく似た質問がすでにあります。ソリューションの 1 つは、次のようなコードを使用します。

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s

スペース、ドット、ダッシュなども削除されることに気付くまで、これは驚くほど機能します。

最初のコードがどのように機能するかはよくわかりませんが、アクセントだけを取り除くようにすることはできますか? または、少なくとも保存する文字のリストが与えられますか? 正規表現に関する私の知識は少ないですが、試してみました (役に立ちませんでした):

/[^\-x00-\x7F]/n # So it would leave the dash alone

私はこのようなことをしようとしています:

string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub
  (/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s

凶悪?はい...

私も試しました:

iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é"

助けてください?

4

3 に答える 3

12

また、スペース、ドット、ダッシュなども削除されます。

すべきではありません。

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s

タイプミスです。NUL 文字を参照するには、x00 の前にバックスラッシュが必要です。

/[^\-x00-\x7F]/n # So it would leave the dash alone

「\」と「x」の間に「-」を挿入すると、ヌル文字への参照が壊れて、範囲が壊れます。

于 2009-02-07T01:00:08.910 に答える
4

メソッドを使用しtransliterateます。http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterateを参照してください

于 2013-07-14T11:27:02.073 に答える
2

それはIconvほどきれいではありませんが、私があなたが望むと思うことをします:

http://snippets.dzone.com/posts/show/2384

于 2009-02-07T01:04:25.233 に答える