Как обработать (декодировать или удалить неверную кодовую точку Unicode) строку с эмодзи в Голанге? - PullRequest
0 голосов
/ 18 октября 2018

Пример строки:

"\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 голосов
/ 18 октября 2018

Что ж, вероятно, не все так просто, поскольку ни \ud83d, ни \udcf8 не являются действительными кодовыми точками, но вместе они являются суррогатной парой, используемой в кодировке UTF-16 для кодирования \U0001F4F8.Теперь strconv.Unquote даст вам две суррогатные половины, которые вы должны объединить самостоятельно.

  1. Используйте strconv.Unquote, чтобы снять кавычки, как вы это сделали.
  2. Конвертировать в [] руну для удобства.
  3. Поиск суррогатных пар с юникодом / utf16.IsSurrogate.
  4. Объединение суррогатных пар с юникодом / utf16.DecodeRune.
  5. Преобразование обратно в строку.
...