diff --git a/utils/utils.go b/utils/utils.go index 31e755b5..3c0ff144 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -225,6 +225,22 @@ func FilterMb4(content string) string { return newContent.String() } +// 是否是修饰符,比如控制EMOJI的颜色控制符,ZWJ +func IsDecorateRune(value rune) bool { + return value == 0xFE0F || value == 0xFE0E || value == 0x200D +} + +func FilterEmoji(content string) string { + newContent := &strings.Builder{} + for _, value := range []rune(content) { + size := utf8.RuneLen(value) + if size >= 1 && size <= 3 && !(value >= 0x2300 && value < 0x32A0 || value >= 0x1F000 && value < 0x1F9F0) && !IsDecorateRune(value) { + newContent.WriteRune(value) + } + } + return newContent.String() +} + func TrimBlankChar(str string) string { return strings.Trim(str, "\n\r\t ") } diff --git a/utils/utils_test.go b/utils/utils_test.go index 6fe537e8..fc008efa 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -128,7 +128,7 @@ func BenchmarkFilterMb4(b *testing.B) { } } -func TestFilterMb4(t *testing.T) { +func TestFilterEmoji(t *testing.T) { for _, v := range [][]string{ []string{ ` @@ -143,11 +143,11 @@ func TestFilterMb4(t *testing.T) { "abcd中国人", }, []string{ - "日配冷藏❄❄", - "日配冷藏❄❄", + "a❄️日配冷藏❄❄🀄A❄️", + "a日配冷藏A", }, } { - str := FilterMb4(v[0]) + str := FilterEmoji(v[0]) if str != v[1] { t.Fatalf("%s failed\nshould be:%s\nbut it's:%s", v[0], v[1], str) }