16
由於MySQL的utf8不支持4字節字符,我正在尋找一種方法來檢測並消除Ruby中字符串的任何4字節utf8字符。我知道我可以更新我的表來使用utf8m4,但出於幾個原因,這是不可能的或所需的解決方案。如何刪除Ruby中的4字節utf-8字符?
只需將字符串編碼爲ASCII即可刪除這些字符,但也會刪除所有其他非ASCII字符,這並不好。
由於MySQL的utf8不支持4字節字符,我正在尋找一種方法來檢測並消除Ruby中字符串的任何4字節utf8字符。我知道我可以更新我的表來使用utf8m4,但出於幾個原因,這是不可能的或所需的解決方案。如何刪除Ruby中的4字節utf-8字符?
只需將字符串編碼爲ASCII即可刪除這些字符,但也會刪除所有其他非ASCII字符,這並不好。
下,似乎對我的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'
謝謝!現在看起來很明顯,你已經提出了它。我對編碼的思考非常深刻,我不認爲只是看每個字符的字節數。 – JZC 2013-05-10 17:48:15
這是長字符串的表現如何? 5000+字符? – 2014-07-17 03:14:54
謝謝謝謝謝謝...沒有個人擔心表現,現在我很高興有一個工作解決方案 – steve 2016-04-14 20:51:21