我做了一个乳齿象/推特< - > IRC机器人一会儿。它一直很好用,但是有人抱怨当人们在乳齿象上使用表情符号时(这似乎在某些用户名中发生了很多......)它打破了他的终端。
我想知道是否有办法在将它们发送到IRC之前从ByteStrings中删除它们(或者至少提供一个选项),谷歌搜索了一下我发现:removing emojis from a string in Python
如果我理解正确的话,看起来像\ U0001F600- \ U0001F64F应该是表情符号范围,但我从来没有使用正则表达式。任何简单的方法将其转换为Haskell?我试过读一下正则表达式,但是当我尝试时,我只得到“字符'U'中的字符串/字符文字中的词汇错误”,我认为语法必须是python的东西。
由于
答案 0 :(得分:3)
Unicode字符由单个反斜杠表示,后跟可选的{16}表示十六进制,x
表示八进制,没有表示字符[0]的十进制数字:
o
这里,putStrLn "\x1f600" --
是Unicode中第一个表情符号字符的十六进制表示的前缀。
您现在可以使用RegExp删除表情符号,或者只需执行以下操作:
\x
[0] Haskell Language 2010: Lexical Structure#Character and String Literals
答案 1 :(得分:2)
不是表情符号或unicode专家,但这似乎有效:
isEmoji :: Char -> Bool
isEmoji c = let uc = fromEnum c
in uc >= 0x1F600 && uc <= 0x1F64F
str = "wew"
Daniel Wagner指出,这可以做得更好:
isEmoji :: Char -> Bool
isEmoji c = c >= '\x1F600' && c <= '\x1F64F'
ghci中的演示:
λ> str
"\128513wew\128513"
λ> filter isEmoji str
"\128513\128513"
λ> filter (not . isEmoji) str
"wew"
说明:fromEnum
函数将字符转换为Unicode定义的相应Int
值。我只是检查函数中的unicode范围的表情符号,以确定它是否真的是表情符号。