我对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的日志中时,就会出现我的问题。
答案 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