golang字符处理

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))
}
}
1
2
true
true

为了排除这样的字符,我加了字符size的判断

1
fmt.Println(unicode.IsNumber(c) && c < 255)

问题解决

待续

参考

字符编码笔记:ASCII,Unicode 和 UTF-8