Как разделить смайлики, содержащие флаги, не разбивая флаг на 2 символа в Google Таблицах


Это моя начальная строка:

1 2

1 ответ:

Краткий ответ

Чтобы правильно разделить три смайлика, нам нужно использовать пользовательскую функцию . К счастью, существуют библиотеки JavaScript, которые могут быть использованы для этого, например, один Общий в ответе Орлин Георгиев , Чтобы получить количество символов графемы в строках javascript?

Объяснение

Формула OP возвращает четыре элемента вместо трех, потому что встроенные функции Google Sheets требуют четырех " символов" (на самом деле это кодовые точки), для представления которых требуется более 4 шестнадцатеричных цифр. Каждый набор "символов", представляющих смайлики, называется "астральными кодовыми точками".

Из https://mathiasbynens.be/notes/javascript-unicode

Астральные кодовые точки довольно легко распознать: если вам нужно более 4 шестнадцатеричных цифр, чтобы представить кодовую точку, это астральная кодовая точка.

Внутренне, JavaScript [а также Google Листы встроенные функции] представляет астральные символы в видесуррогатных пар , аон выставляет отдельные суррогатные половинки в виде отдельных "символов". Если вы представляете символы, используя только экранирующие последовательности, совместимые с ECMAScript 5, вы увидите, что для каждого астрального символа требуется два эскейпа. Это сбивает с толку, потому что люди обычно думают в терминах символов Юникода или графем вместо этого.

Пользовательская функция

function SPLITGRAPHEMES(string) {
  var splitter = new GraphemeSplitter();
  return splitter.splitGraphemes(string); 
}

Примечание: не забудьте включить указанную библиотеку JavaScript

Синтаксис

Предположим, что A1 содержит смайлики. Чтобы разделить три смайлика в массиве 1 х 3, используйте следующую формулу:

=TRANSPOSE(SPLITGRAPHEMES(A1))

Примечание: В Windows смайлики () в этом вопросе не выглядят так же, как в Chrome OS, поэтому в предыдущем абзаце было использовано изображение.