2013-05-10 18 views
16

MySQLのutf8は4バイト文字をサポートしていないので、私はRubyの文字列から4バイトのutf8文字を検出して排除する方法を探しています。 utf8m4を使用するように私のテーブルを更新することはできますが、それは不可能であるか、目的の解決策がいくつかの理由からあります。Rubyで4バイトのutf-8文字を削除するには?

単に文字列をASCIIにエンコードすると、これらの文字は削除されますが、他のすべての非ASCII文字も削除されます。

答えて

30

以下は、Ruby 1.9.3に私のために働くようだ:たとえば

input.each_char.select{|c| c.bytes.count < 4 }.join('') 

input = "hello \xF0\xA9\xB6\x98 world"     # includes U+29D98 
input.each_char.select{|c| c.bytes.count < 4 }.join('') # 'hello world' 
+0

ありがとう!あなたがそれを提案したので今明らかになった。私はエンコーディングについて考えるのがとても深かったので、各文字のバイト数を調べるだけではないと思っていました。 – JZC

+0

これは長い文字列でどのようにパフォーマンスが向上しますか? 5000文字以上? –

+0

ありがとう、ありがとう、ありがとう、ありがとう、私は実用的なソリューションを持って満足している – steve

関連する問題