golang字符处理

原创内容,转载请注明出处

Posted by Weakyon Blog on December 18, 2017

golang字符处理已经踩过好几个坑了,记录一下

一 emoji表情的处理

用的mysql版本比较老,不支持emoji,所以需要golang来去除emoji表情

判断思路是普通汉字utf8下都是3字节内,而emoji表情是4字节,如果大于4字节就过滤掉即可

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

例如”〇”这个,他既是汉字又是数字

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

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

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

问题解决

待续

参考

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

18 Dec 2017