golang字符处理已经踩过好几个坑了,记录一下
emoji表情的处理
用的mysql版本比较老,不支持emoji,所以需要golang来去除emoji表情
判断思路是普通汉字utf8下都是3字节内,而emoji表情是4字节,如果大于4字节就过滤掉即可
1 2 3 4 5 6 7 8 9 10 11 12
| import "unicode/utf8"
func FilterEmoji(content string) string { new_content := "" for _, value := range content { _, size := utf8.DecodeRuneInString(string(value)) if size <= 3 { new_content += string(value) } } return new_content }
|
识别汉字或者数字等
golang自带识别数字的函数
但是这个函数的行为和预期有一些差别
unicode.IsNumber这个函数,在识别数字之外的字符,有时候也会返回true
例如"〇"这个,他既是汉字又是数字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| package main
import ( "fmt" "unicode" )
func main() { str := "〇" cs := []rune(str) for _, c := range cs { fmt.Println(unicode.IsNumber(c)) fmt.Println(unicode.Is(unicode.Han, c)) } }
|
为了排除这样的字符,我加了字符size的判断
1
| fmt.Println(unicode.IsNumber(c) && c < 255)
|
问题解决
待续
参考
字符编码笔记:ASCII,Unicode
和 UTF-8