In a unicode string, each grapheme consists of one or more code points. However, there are some code points, such as the Zero-width joiner (ZWJ), which are never a part of a grapheme. The ZWJ is, in itself, invisible. Are all of those "non-grapheme" code points always invisible?
Asked
Active
Viewed 75 times
0
-
ZWJ is part of a grapheme and it is also the purpose of it: to modify how characters are shows. It may not have any ink on its own, but it modify the grapheme (so it is part of it), so it behaviour is visible. In other words: it is sent to the font (not like other control characters), and font will use it for display purpose. – Giacomo Catenazzi Jan 05 '22 at 09:15
2 Answers
0
The Unicode representation of the Ogham script is notable for containing a non-invisible whitespace character. (U+1680: OGHAM SPACE MARK)
Tom Scott made an excellent YouTube video on the subject: link

BambooleanLogic
- 7,530
- 3
- 30
- 56
0
There are many joining characters which are intended to modify a base character. Whether they provide a grapheme on their own is partially an implementation detail, I expect.
- Example:
o
followed by U+0308 COMBINING DIAERESIS producesö
(the glyph in isolation is rendered by your browser as̈
) - List of all code points in this category: https://codepoints.net/search?lb=CM
Recent Unicode versions also have invisible characters which modify how a previous emoji is being rendered, famously to add e.g. a skin color trait to emojis with human figures or faces. These by definition are not graphemes in their own right, though again, rendering engines are probably free to figure out a way to represent them if they are encountered in isolation.
- Example: U+1F44B WAVING HAND SIGN followed by U+1F3FB EMOJI MODIFIER FITZPATRICK TYPE-1-2 (which in isolation renders as
) produces
- Full catalog: https://www.unicode.org/emoji/charts/full-emoji-modifiers.html

tripleee
- 175,061
- 34
- 275
- 318