2013-05-10 48 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