使用Ruby从字符串中删除字节大小大于2的字符

时间:2018-09-20 14:38:01

标签: ruby-on-rails ruby regex

我对mysql和某些字符有疑问。如果用户输入sync() { branch = $(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') git checkout master git pull origin/master git checkout $branch } ,则会出现此错误:

"hello ●"

我想排除字节大小大于2的所有字符,即保留诸如Mysql2::Error: Incorrect string value: '\\xE2\\x97\\x8F he...' for column 'subject' éà之类的法语字符,并删除表情符号或诸如{{1 }}。

鉴于ç,我想获得。为了做到这一点,我这样写:

string = "hèllö>●!"

这不是我期望的。从字符串中将字节大小大于2的所有字符中删除的最佳方法是什么?

我没有在模型中这样做,因为我可以使用gem来管理它,但是当工作想要将字符串放入Amazon SES的日志中时,就会出现我的问题。

2 个答案:

答案 0 :(得分:3)

我怀疑您收到该错误消息,因为您的列文本编码错误。如果您在系统中使用Unicode,现在应该是这样,那么您的列类型应为utf8mb4。有关如何更改列类型的信息,请参见this

考虑到您的评论,以下内容将删除BMP之外的所有字符

sentence.gsub(/[\u{10000}-\u{10FFFF}]/,'')

答案 1 :(得分:2)

详细说明OP的工作,而不使用正则表达式:

string = "hèllö>●!"

cleaned = string.each_char.with_object("") do |char, str|
   str << char unless char.bytesize > 2
end

p cleaned