Как разделить смайлики, содержащие флаги, не разбивая флаг на 2 символа в Google Таблицах
Это моя начальная строка:
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, поэтому в предыдущем абзаце было использовано изображение.