如何在golang中使用表情符号处理(解码或删除无效的Unicode代码点)字符串?

时间:2018-10-18 17:30:29

标签: go unicode emoji

示例字符串:

"\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u044b! \n\u0421\u043f\u0430\u0441\u0438\u0431\u043e \ud83d\udcf8 link.ru \u0437\u0430 \n#hashtag  Русское слово, an English word"

没有这个\ud83d\udcf8,我的功能就可以很好地发挥作用:

func convertUnicode(text string) string {
    s, err := strconv.Unquote(`"` + text + `"`)
    if err != nil {
        // Error.Printf("can't convert: %s | err: %s\n", text, err)
        return text
    }
    return s
}

我的问题是如何检测文本包含此类条目?以及如何将其转换为表情符号或如何从文本中删除?谢谢

1 个答案:

答案 0 :(得分:2)

好吧,可能不是\ud83d\udcf8都不是有效的代码点,而是UTF-16编码中用来替代\U0001F4F8的替代对。现在strconv.Unquote将为您提供两个代理半部分,您必须将自己组合在一起。

  1. 使用strconv.Unquote取消引用。
  2. 为方便起见,转换为[]符文。
  3. 使用unicode / utf16.IsSurrogate查找代理对。
  4. 使用unicode / utf16.DecodeRune组合代理对。
  5. 转换回字符串。