2013-05-10 44 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 2013-05-10 17:48:15

+0

这是长字符串的表现如何? 5000+字符? – 2014-07-17 03:14:54

+0

谢谢谢谢谢谢...没有个人担心表现,现在我很高兴有一个工作解决方案 – steve 2016-04-14 20:51:21

相关问题