Unicode characters and emojis.
0
unicode-characters-and-emojis.md
1# Unicode Characters & Emojis
2
3A character is an overloaded term that can mean many things.
4This gist will briefly touch on the differences between Code Point, Code Unit, Grapheme and Glyph, with a particular focus on emojis.
5
6### Code Point
7
8A [code point][cp] is the atomic unit of information that consists of a numerical value that maps to a specific character which is given meaning by the [Unicode®︎ Standard][unistd].
9A code point represent a digit, letter, whitespace, punctuation mark, emoji, symbol, control character, or formatting.
10The text is a sequence of code points.
11
12### Code Unit
13
14A [code unit][cu] is the unit of storage of a part of an encoded code point.
15
16- Some characters are encoded using multiple code units, resulting in a **variable-length** encoding.
17- `UTF-32` is a **fixed width** encoding, hence all code points can be encoded in a single 32-bit code unit.
18
19The following table shows the three most common **character encoding schemes** and their corresponding [word size][word].
20There are also 5 characters with their respective number of code units for the corresponding encoding.
21
22| Encoding | Word Size | Width Type | A | © | ☃ | 😀 | 👉🏿 |
23| --- | :---: | :---: | --- | --- | --- | --- | --- |
24| UTF-8 | 8-bit | Variable | 1 CU | 2 CU | 3 CU | 4 CU | 8 CU |
25| UTF-16 | 16-bit | Variable | 1 CU | 1 CU | 1 CU | 2 CU | 4 CU |
26| UTF-32 | 32-bit | Fixed | 1 CU | 1 CU | 1 CU | 1 CU | 2 CU |
27
28> [!NOTE]
29> - The character `👉🏿` is a combination of two code points wich requires two 32-bit code units.
30> - `UTF-32` does not always have a 1:1 mapping between code points and what a user perceives as characters.
31
32In **JavaScript**, strings are represented fundamentally as sequences of `UTF-16` code units:
33
34- Every `UTF-16` code unit is exactly 16 bits long.
35- Code units and can be written in a string with `\u` followed by exactly four hex digits.
36- Code points can be written in a string with `\u{xxxxxx}` where `xxxxxx` represents 1–6 hex digits.
37
38The entire Unicode character set is much bigger than what a single `UTF-16` code unit can represent, supplementary characters are encoded as two 16-bit code units called a surrogate pair.
39The length data property of a `String` value counts `UTF-16` code units.
40
41### Grapheme
42
43A [grapheme][grap] is a sequence of one or more code points that are displayed as a single, graphical unit that a reader recognizes as a single element in the context of a particular [writing system][ws].
44
45- User-perceived characters are referred to as graphemes.
46- Some code points are never part of any grapheme (e.g. the [ZWNJ][zwnj], or [directional overrides][bo]).
47
48The following table shows an example with 3 characters:
49
50| Character | Code Point | Description
51| :---: | ---: | :--- |
52| `ä` | `000E4` | Single code point. |
53| `ä` | `00061 00308` | Base character (`a`), and combining diaeresis (`◌̈`). |
54| `👉🏿` | `1F449 1F3FF` | Backhand index pointing right (`👉`), and dark skin tone (`🏿`). |
55
56> **Note**
57> - The characters `ä` and `ä` are the same grapheme, but have different code points.
58> - The character `👉🏿` is two code points, but is displayed as a single character.
59> - The diaeresis character (`¨`) and the combining diaeresis (`◌̈`) are not the same code point.
60
61In JavaScript, `Intl.Segmenter` is used to split a string into segments at grapheme cluster boundaries, as determined by a specified locale.
62Expand the details below to see a JavaScript example that demonstrates the differences between code point, code unit, and grapheme in different string encodings.
63
64<details>
65<summary>Expand to see an example of code point, code unit, and grapheme.</summary>
66
67```js
68// Backhand Index Pointing Right: Dark Skin Tone.
69const str = '👉🏿'; // 1F449 1F3FF
70console.log('String:', str);
71
72// Split using UTF-8 code units.
73const encoder = new TextEncoder();
74const encoded = encoder.encode(str);
75const u8_cu = [...encoded].map(byte => byte.toString(16));
76console.log('UTF-8:', u8_cu);
77// ['f0', '9f', '91', '89', 'f0', '9f', '8f', 'bf']
78
79// Split using UTF-16 code units.
80// This is the default encoding in JavaScript.
81const u16_cu = str.split('');
82console.log('UTF-16:', u16_cu);
83// ['\uD83D', '\uDC49', '\uD83C', '\uDFFF']
84
85// Split using UTF-32 code units.
86// A UTF-32 code unit is always a single code point.
87const u32_cu = Array.from(str); // or [...str]
88console.log('UTF-32:', u32_cu); // ['👉', '🏿']
89
90// Split using graphemes.
91const segmenter = new Intl.Segmenter();
92const segment = segmenter.segment(str);
93const graphemes = [...segment].map(x => x.segment);
94console.log('Grapheme:', graphemes); // ['👉🏿']
95```
96
97In JavaScript, `String.prototype.split()` and `String.prototype[@@iterator]()` splits the characters of a string in different ways.
98String indexes and `split()` operates by UTF-16 code units, and `@@iterator()` iterates by code points.
99
100</details>
101
102### Glyph
103
104A [glyph][gly] is an image, usually stored in a font (which is a collection of glyphs), used to represent graphemes or parts thereof.
105
106Fonts may compose multiple glyphs into a single representation, for example, if the above `ä` is a single code point, a font may choose to render that as two separate, spatially overlaid glyphs.
107
108For OTF, the font's GSUB and GPOS tables contain substitution and positioning information to make this work. A font may contain multiple alternative glyphs for the same grapheme, too.
109
110### Modifiers & Variation Selectors
111
112[Variation Selectors][vs] (VS) designates a specific block (`FE00`-`FE0F`) within the Unicode character set containing 16 selectors used to specify a glyph variant for a preceding character.
113Certain characters can have variant forms or styles, and variation selectors are used to indicate these variations.
114These selectors are generally applied to base characters to modify their appearance, providing a means to represent different writing styles, scripts, or regional preferences.
115
116Emojis can have diverse presentations, this includes variations in skin tones, genders, or other contextual modifications.
117The following items are the emoji-specific variation selectors.
118
119- The VS-15 (`FE0E`) is used to request a text presentation (monochrome) for an emoji character (`♀︎`).
120- The VS-16 (`FE0F`) is used to request an emoji presentation (polychrome) for an emoji character (`♀️`).
121
122[Skin tone variations][est] are achieved using modifiers from `1F3FB` to `1F3FF` (`🏻🏼🏽🏾🏿`), they are based on the [Fitzpatrick scale][fzs], which is a formal classification of human skin tones. When one of these code points is appended to an emoji that supports skin tone modifiers, it will change the skin tone of the emoji.
123
124<details>
125<summary>Expand to see a table with all skin tones.</summary>
126
127| Character | Code Point | Name |
128| :---: | :---: | :--- |
129| `🏻` | `1F3FB` | Light skin tone. |
130| `🏼` | `1F3FC` | Medium-light skin tone. |
131| `🏽` | `1F3FD` | Medium skin tone. |
132| `🏾` | `1F3FE` | Medium-dark skin tone. |
133| `🏿` | `1F3FF` | Dark skin tone. |
134
135</details>
136
137### Zero Width Joiner
138
139The [zero-width joiner][zwj] (ZWJ) is a non-printing character (`200D`) used in the computerized typesetting of writing systems in which the shape or positioning of a grapheme depends on its relation to other graphemes ([complex scripts][cs]). When placed between two characters that would otherwise not be connected, a ZWJ causes them to be printed in their connected forms.
140
141When a ZWJ is placed between two emoji characters (or interspersed between multiple), it can result in a single glyph or new emoji, such as the family emoji (`👪`), made up of two adult emoji (`👨👩`) and one or two child emoji (`👦`).
142
143> [!NOTE]
144> When not available, the ZWJ characters are ignored and a fallback sequence of separate emoji is displayed.
145> Thus an emoji ZWJ sequence should only be supported where the fallback sequence would also make sense to a viewer.
146> See the [Recommended Emoji ZWJ Sequences][zwjs].
147
148When working with skin tones, you should be careful with those emojis that consist of two or more emojis joined by the **ZWJ**.
149- Skin tone modifiers must be included after the emoji but before the ZWJ.
150- Some ZWJ sequences include multiple emoji that each have different skin tone modifiers.
151
152<details>
153<summary>Expand to see an example combining characters and skin tones.</summary>
154
155```js
156String.fromCodePoint(
157 0x1FAF1, // Rightwards Hand (🫱)
158 0x1F3FB, // Light skin tone (🏻)
159 0x0200D, // Zero Width Joiner
160 0x1FAF2, // Leftwards Hand (🫲)
161 0x1F3FF, // Dark skin tone (🏿)
162); // Handshake: Light Skin Tone, Dark Skin Tone (🫱🏻🫲🏿)
163```
164
165</details>
166
167## Useful Unicode Characters
168
169<details>
170
171### Mathematical
172
173<details>
174
175<details>
176<summary><h4>Binary operators</h4></summary>
177
178| Grapheme | Code Point | Description |
179| --- | --- | --- |
180| `−` | 2212 | Minus sign
181| `×` | 00D7 | Multiplication sign
182| `÷` | 00F7 | Division sign
183| `⋅` | 22C5 | Dot operator (sdot)
184| `∕` | 2215 | Division slash
185
186</details>
187
188<details>
189<summary><h4>Unary operators</h4></summary>
190
191| Grapheme | Code Point | Description |
192| --- | --- | --- |
193| `√` | 221A | Square root |
194| `∛` | 221B | Cube root |
195| `∜` | 221C | Fourth root |
196| `±` | 00B1 | Plus-minus sign |
197| `∓` | 2213 | Minus-or-plus sign |
198| `′` | 2032 | Prime |
199| `″` | 2033 | Double prime |
200| `‴` | 2034 | Triple prime |
201| `∏` | 220F | N-ary product |
202| `∑` | 2211 | N-ary summation |
203
204</details>
205
206<details>
207<summary><h4>Fractions</h4></summary>
208
209| Grapheme | Code Point | Description |
210| --- | --- | --- |
211| `½` | 00BD | One-half |
212| `⅓` | 2153 | One-third |
213| `⅔` | 2154 | Two-thirds |
214| `¼` | 00BC | One-quarter |
215| `¾` | 00BE | Three-quarters |
216| `⅕` | 2155 | One-fifth |
217| `⅖` | 2156 | Two-fifths |
218| `⅗` | 2157 | Three-fifths |
219| `⅘` | 2158 | Four-fifths |
220| `⅙` | 2159 | One-sixth |
221| `⅚` | 215A | Five-sixths |
222| `⅐` | 2150 | One-seventh |
223| `⅛` | 215B | One-eighth |
224| `⅜` | 215C | Three-eighths |
225| `⅝` | 215D | Five-eighths |
226| `⅞` | 215E | Seven-eighths |
227| `⅑` | 2151 | One-ninth |
228| `⅒` | 2152 | One-tenth |
229| `⅟` | 215F | Fraction numerator one |
230| `⁄` | 2044 | Fraction slash |
231
232</details>
233
234<details>
235<summary><h4>Calculus & Equations</h4></summary>
236
237| Grapheme | Code Point | Description |
238| --- | --- | --- |
239| ∞ | 221E | Infinity |
240| ∂ | 2202 | Partial differential |
241| ∫ | 222B | Integral |
242| ∬ | 222C | Double integral |
243| ∭ | 222D | Triple integral |
244| ⨌ | 2A0C | Quadruple integral |
245| ∮ | 222E | Contour integral |
246| ∯ | 222F | Surface integral |
247| ∰ | 2230 | Volume integral |
248| ∱ | 2231 | Clockwise integral |
249| ∲ | 2232 | Clockwise contour integral |
250| ∳ | 2233 | Anticlockwise contour integral |
251| ∇ | 2207 | Nabla |
252
253</details>
254
255<details>
256<summary><h4>Sets</h4></summary>
257
258| Grapheme | Code Point | Description |
259| --- | --- | --- |
260| `⊂` | 2282 | Subset of |
261| `⊃` | 2283 | Superset of |
262| `⊆` | 2286 | Subset of or equal to |
263| `⊇` | 2287 | Superset of or equal to |
264| `⊄` | 2284 | Not a subset of |
265| `∩` | 2229 | Intersection |
266| `∪` | 222A | Union |
267| `∈` | 2208 | Element of |
268| `∊` | 220A | Small element of |
269| `∉` | 2209 | Not an element of |
270| `∋` | 220B | Contains as member |
271| `∍` | 220D | Small contains as member |
272| `∌` | 220C | Does not contain as member |
273| `∅` | 2205 | Empty set |
274
275</details>
276
277<details>
278<summary><h4>Relationships</h4></summary>
279
280| Grapheme | Code Point | Description |
281| --- | --- | --- |
282| `∝` | 221D | Proportional to |
283| `∣` | 2223 | Divides |
284| `∤` | 2224 | Does not divide |
285| `≃` | 2243 | Asymptotically equal to |
286| `≄` | 2244 | Not asymptotically equal to |
287| `≅` | 2245 | Approximately equal to |
288| `≆` | 2246 | Approximately but not actually equal to |
289| `≇` | 2247 | Neither approximately nor actually equal to |
290| `≈` | 2248 | Almost equal to |
291| `≉` | 2249 | Not almost equal to |
292| `≜` | 225C | Delta equal to |
293| `≝` | 225D | Equal to by definition |
294| `≟` | 225F | Questioned equal to |
295| `≠` | 2260 | Not equal to |
296| `≡` | 2261 | Identical to |
297| `≤` | 2264 | Less-than or equal to |
298| `≥` | 2265 | Greater-than or equal to |
299| `≪` | 226A | Much less-than |
300| `≫` | 226B | Much greater-than |
301
302</details>
303
304<details>
305<summary><h4>Geometry</h4></summary>
306
307| Grapheme | Code Point | Description |
308| --- | --- | --- |
309| `∠` | 2220 | Angle |
310| `∡` | 2221 | Measured angle |
311| `∢` | 2222 | Spherical angle |
312| `⟂` | 27C2 | Perpendicular |
313| `∟` | 221F | Right angle |
314
315</details>
316
317<details>
318<summary><h4>Logic</h4></summary>
319
320| Grapheme | Code Point | Description |
321| --- | --- | --- |
322| `¬` | 00AC | Logical NOT |
323| `∧` | 2227 | Logical AND |
324| `∨` | 2228 | Logical OR |
325| `∎` | 220E | End of proof |
326| `∴` | 2234 | Therefore |
327| `∵` | 2235 | Because |
328| `∀` | 2200 | For all |
329| `∃` | 2203 | There exists |
330| `∄` | 2204 | There does not exists |
331
332</details>
333
334<details>
335<summary><h4>Typography</h4></summary>
336
337| Grapheme | Code Point | Description |
338| --- | --- | --- |
339| ⋮ | 22EE | Vertical ellipsis |
340| ⋯ | 22EF | Horizontal ellipsis |
341| ⋰ | 22F0 | Up right diagonal ellipsis |
342| ⋱ | 22F1 | Down right diagonal ellipsis |
343| ⟨ | 27E8 | Left angle bracket |
344| ⟩ | 27E9 | Right angle bracket |
345| ° | 00B0 | Degree sign |
346
347</details>
348
349<details>
350<summary><h4>Roman Numeral</h4></summary>
351
352| Grapheme | Code Point | Description |
353| --- | --- | --- |
354| `Ⅰ` | 2160 | Roman numeral one |
355| `Ⅱ` | 2161 | Roman numeral two |
356| `Ⅲ` | 2162 | Roman numeral three |
357| `Ⅳ` | 2163 | Roman numeral four |
358| `Ⅴ` | 2164 | Roman numeral five |
359| `Ⅵ` | 2165 | Roman numeral six |
360| `Ⅶ` | 2166 | Roman numeral seven |
361| `Ⅷ` | 2167 | Roman numeral eight |
362| `Ⅸ` | 2168 | Roman numeral nine |
363| `Ⅹ` | 2169 | Roman numeral ten |
364| `Ⅺ` | 216A | Roman numeral eleven |
365| `Ⅻ` | 216B | Roman numeral twelve |
366| `Ⅼ` | 216C | Roman numeral fifty |
367| `Ⅽ` | 216D | Roman numeral one hundred |
368| `Ⅾ` | 216E | Roman numeral five hundred |
369| `Ⅿ` | 216F | Roman numeral one thousand |
370| `ↀ` | 2180 | Roman numeral one thousand C D |
371| `ↁ` | 2181 | Roman numeral five thousand |
372| `ↂ` | 2182 | Roman numeral ten thousand |
373| `ↇ` | 2187 | Roman numeral fifty thousand |
374| `ↈ` | 2188 | Roman numeral one hundred thousand |
375| `ⅰ` | 2170 | Small roman numeral one |
376| `ⅱ` | 2171 | Small roman numeral two |
377| `ⅲ` | 2172 | Small roman numeral three |
378| `ⅳ` | 2173 | Small roman numeral four |
379| `ⅴ` | 2174 | Small roman numeral five |
380| `ⅵ` | 2175 | Small roman numeral six |
381| `ⅶ` | 2176 | Small roman numeral seven |
382| `ⅷ` | 2177 | Small roman numeral eight |
383| `ⅸ` | 2178 | Small roman numeral nine |
384| `ⅹ` | 2179 | Small roman numeral ten |
385| `ⅺ` | 217A | Small roman numeral eleven |
386| `ⅻ` | 217B | Small roman numeral twelve |
387| `ⅼ` | 217C | Small roman numeral fifty |
388| `ⅽ` | 217D | Small roman numeral one hundred |
389| `ⅾ` | 217E | Small roman numeral five hundred |
390| `ⅿ` | 217F | Small roman numeral one thousand |
391| `ↅ` | 2185 | Roman numeral six late form |
392| `ↆ` | 2186 | Roman numeral fifty early form |
393| `Ↄ` | 2183 | Roman numeral reversed one hundred |
394
395</details>
396
397<details>
398<summary><h4>Other</h4></summary>
399
400| Grapheme | Code Point | Description |
401| --- | --- | --- |
402| `μ` | 003BC | Greek small letter MU |
403| `π` | 003C0 | Greek small letter PI |
404| `ℂ` | 02102 | Complex numbers |
405| `ℍ` | 0210D | Hyperbolic plane, quaternions |
406| `ℓ` | 02113 | Script small L |
407| `ℕ` | 02115 | Natural numbers |
408| `𝕆` | 1D546 | Octonions |
409| `ℙ` | 02119 | Prime numbers |
410| `ℚ` | 0211A | Rational numbers |
411| `ℝ` | 0211D | Real numbers |
412| `ℤ` | 02124 | Integers numbers |
413
414</details>
415
416</details>
417
418### Science
419
420<details>
421
422<details>
423<summary><h4>Physics</h4></summary>
424
425| Grapheme | Code Point | Description |
426| --- | --- | --- |
427| `ħ` | 0127 | Reduced Planck constant |
428| `ƛ` | 019B | Reduced wavelength |
429| `Ψ` | 03A8 | Greek capital letter psi |
430| `λ` | 03BB | Greek small letter lambda |
431| `ν` | 03BD | Greek small letter nu |
432| `ψ` | 03C8 | Greek small letter psi |
433| `ω` | 03C9 | Greek small letter omega |
434
435</details>
436
437<details>
438<summary><h4>Chemistry</h4></summary>
439
440| Grapheme | Code Point | Description |
441| --- | --- | --- |
442| `⇌` | 21CC | Equilibrium sign |
443
444</details>
445
446</details>
447
448### Engineering
449
450<details>
451
452| Grapheme | Code Point | Description |
453| --- | --- | --- |
454| `⌭` | 232D | Cylindricity |
455| `Ω` | 03A9 | Omega |
456| `℄` | 2104 | Centre line |
457| `﹊` | FE4A | Centreline overline |
458| `﹎` | FE4E | Centreline low line |
459
460<details>
461<summary><h4>Power Symbols</h4></summary>
462
463| Grapheme | Code Point | Description |
464| --- | --- | --- |
465| `⏻` | 23FB | Power symbol |
466| `⏼` | 23FC | Power on-off |
467| `⏽` | 23FD | Power on |
468| `⭘` | 2B58 | Power off |
469| `⏾` | 23FE | Power sleep |
470
471</details>
472
473</details>
474
475### Financial
476
477<details>
478
479<details>
480<summary><h4>Currency</h4></summary>
481
482| Grapheme | Code Point | Description |
483| --- | --- | --- |
484| `฿` | 0E3F | Thai Baht |
485| `₿` | 20BF | Bitcoin |
486| `¢` | 00A2 | Cent |
487| `¤` | 00A4 | Currency |
488| `$` | 0024 | Dollar |
489| `€` | 20AC | Euro |
490| `₴` | 20B4 | Hryvnia |
491| `₹` | 20B9 | Indian rupee |
492| `₤` | 20A4 | Lira |
493| `₪` | 20AA | New shekel |
494| `₱` | 20B1 | Peso |
495| `₽` | 20BD | Russian ruble |
496| `£` | 00A3 | Sterling pound |
497| `₺` | 20BA | Turkish lira |
498| `₩` | 20A9 | Won |
499| `¥` | 00A5 | Yen (Yuan) |
500
501</details>
502
503<details>
504<summary><h4>Other</h4></summary>
505
506| Grapheme | Code Point | Description |
507| --- | --- | --- |
508| `‰` | 2030 | Per mille |
509| `‱` | 2031 | Per ten thousand |
510
511</details>
512
513</details>
514
515### Box Drawing
516
517<details>
518
519```
520┌─┬─┐ ╭─┬─╮ ┏━┳━┓ ╔═╦═╗
521│ │ │ │ │ │ ┃ ┃ ┃ ║ ║ ║
522├─┼─┤ ╞═╪═╡ ┣━╋━┫ ╠═╬═╣
523│ │ │ │ │ │ ┃ ┃ ┃ ║ ║ ║
524└─┴─┘ ╰─┴─╯ ┗━┻━┛ ╚═╩═╝
525```
526
527</details>
528
529### Miscellaneous
530
531<details>
532
533<details>
534<summary><h4>Numbers</h4></summary>
535
536| Grapheme | Code Point | Description |
537| --- | --- | --- |
538| `➀` | 2780 | Circled digit one |
539| `➁` | 2781 | Circled digit two |
540| `➂` | 2782 | Circled digit three |
541| `➃` | 2783 | Circled digit four |
542| `➄` | 2784 | Circled digit five |
543| `➅` | 2785 | Circled digit six |
544| `➆` | 2786 | Circled digit seven |
545| `➇` | 2787 | Circled digit eight |
546| `➈` | 2788 | Circled digit nine |
547| `➉` | 2789 | Circled number ten |
548| `❶` | 2776 | Negative circled digit one |
549| `❷` | 2777 | Negative circled digit two |
550| `❸` | 2778 | Negative circled digit three |
551| `❹` | 2779 | Negative circled digit four |
552| `❺` | 277A | Negative circled digit five |
553| `❻` | 277B | Negative circled digit six |
554| `❼` | 277C | Negative circled digit seven |
555| `❽` | 277D | Negative circled digit eight |
556| `❾` | 277E | Negative circled digit nine |
557| `❿` | 277F | Negative circled number ten |
558
559</details>
560
561<details>
562<summary><h4>Design</h4></summary>
563
564| Grapheme | Code Point | Description |
565| --- | --- | --- |
566| `·` | 00B7 | Middle dot |
567| `․` | 2024 | One dot leader |
568| `…` | 2026 | Horizontal ellipsis |
569| `“` | 201C | Left double quotation mark |
570| `”` | 201D | Right double quotation mark |
571| `«` | 00AB | Left-pointing double angle quotation mark |
572| `»` | 00BB | Right-pointing double angle quotation mark |
573| `‹` | 2039 | Single left-pointing angle quotation mark |
574| `›` | 203A | Single right-pointing angle quotation mark |
575| `„` | 201E | Double low-9 quotation mark |
576| `⟨` | 27E8 | Mathematical left angle bracket |
577| `⟩` | 27E9 | Mathematical right angle bracket |
578| `—` | 2014 | General punctuation |
579| `~` | 007E | Basic latin |
580| `※` | 203B | Reference mark |
581
582</details>
583
584<details>
585<summary><h4>Arrows</h4></summary>
586
587| Grapheme | Code Point | Description |
588| --- | --- | --- |
589| `↶` | 21B6 | Anticlockwise top semicircle arrow |
590| `↷` | 21B7 | Clockwise top semicircle arrow |
591| `⮜` | 2B9C | Black leftwards equilateral arrowhead |
592| `⮝` | 2B9D | Black upwards equilateral arrowhead |
593| `⮞` | 2B9E | Black rightwards equilateral arrowhead |
594| `⮟` | 2B9F | Black downwards equilateral arrowhead |
595| `←` | 2190 | Leftwards arrow |
596| `↑` | 2191 | Upwards arrow |
597| `→` | 2192 | Rightwards arrow |
598| `↓` | 2193 | Downwards arrow |
599| `⤩` | 2929 | South east arrow and south west arrow |
600| `⤪` | 292A | South west arrow and north west arrow |
601| `⤧` | 2927 | North west arrow and north east arrow |
602| `⤨` | 2928 | North east arrow and south east arrow |
603| `⤶` | 2936 | Arrow pointing downwards then curving leftwards |
604| `⤷` | 2937 | Arrow pointing downwards then curving rightwards |
605| `⤸` | 2938 | Right-side arc clockwise arrow |
606| `⤹` | 2939 | Left-side arc anticlockwise arrow |
607| `⤺` | 293A | Top arc anticlockwise arrow |
608| `⤻` | 293B | Bottom arc anticlockwise arrow |
609| `⤡` | 2921 | North west and south east arrow |
610| `⤢` | 2922 | North east and south west arrow |
611| `➛` | 279B | Drafting point rightwards arrow |
612| `➝` | 279D | Triangle-headed rightwards arrow |
613| `➞` | 279E | Heavy triangle-headed rightwards arrow |
614| `➟` | 279F | Dashed triangle-headed rightwards arrow |
615| `➜` | 279C | Heavy round-tipped rightwards arrow |
616| `➾` | 27BE | Open-outlined rightwards arrow |
617| `➼` | 27BC | Wedge-tailed rightwards arrow |
618| `➦` | 27A6 | Heavy black curved upwards and rightwards arrow |
619| `➧` | 27A7 | Squat black rightwards arrow |
620| `➥` | 27A5 | Heavy black curved downwards and rightwards arrow |
621| `➤` | 27A4 | Black rightwards arrowhead |
622| `➢` | 27A2 | Three-d top-lighted rightwards arrowhead |
623| `➘` | 2798 | Heavy south east arrow |
624| `➙` | 2799 | Heavy rightwards arrow |
625| `➚` | 279A | Heavy north east arrow |
626| `⇇` | 21C7 | Leftwards paired arrows |
627| `⇈` | 21C8 | Upwards paired arrows |
628| `⇉` | 21C9 | Rightwards paired arrows |
629| `⇊` | 21CA | Downwards paired arrows |
630| `⇶` | 21F6 | Three rightwards arrows |
631| `⇳` | 21F3 | Up down white arrow |
632| `⇱` | 21F1 | North west arrow to corner |
633| `⇲` | 21F2 | South east arrow to corner |
634| `⇤` | 21E4 | Leftwards arrow to bar |
635| `⇥` | 21E5 | Rightwards arrow to bar |
636| `⇽` | 21FD | Leftwards open-headed arrow |
637| `⇾` | 21FE | Rightwards open-headed arrow |
638| `⇿` | 21FF | Left right open-headed arrow |
639| `⇦` | 21E6 | Leftwards white arrow |
640| `⇧` | 21E7 | Upwards white arrow |
641| `⇨` | 21E8 | Rightwards white arrow |
642| `⇩` | 21E9 | Downwards white arrow |
643| `⏴` | 23F4 | Black medium left-pointing triangle |
644| `⏵` | 23F5 | Black medium right-pointing triangle |
645| `⏶` | 23F6 | Black medium up-pointing triangle |
646| `⏷` | 23F7 | Black medium down-pointing triangle |
647| `⇄` | 21C4 | Rightwards arrow over leftwards arrow |
648| `⇆` | 21C6 | Leftwards arrow over rightwards arrow |
649| `⇅` | 21C5 | Upwards arrow leftwards of downwards arrow |
650| `↺` | 21BA | Anticlockwise open circle arrow |
651| `↻` | 21BB | Clockwise open circle arrow |
652
653</details>
654
655<details>
656<summary><h4>Temperature</h4></summary>
657
658| Grapheme | Code Point | Description |
659| --- | --- | --- |
660| `℃` | 2103 | Degree celsius |
661| `℉` | 2109 | Degree fahrenheit |
662| `☆` | 2606 | White star |
663| `★` | 2605 | Black star |
664| `☁` | 2601 | Cloud |
665| `☽` | 263D | First quarter moon |
666
667</details>
668
669<details>
670<summary><h4>Music</h4></summary>
671
672| Grapheme | Code Point | Description |
673| --- | --- | --- |
674| `♩` | 2669 | Quarter note |
675| `♪` | 266A | Eighth note |
676| `♫` | 266B | Beamed eighth notes |
677| `♬` | 266C | Beamed sixteenth notes |
678| `♭` | 266D | Flat sign |
679| `♮` | 266E | Natural sign |
680| `♯` | 266F | Sharp sign |
681| `𝄆` | 1D106 | Left repeat sign |
682| `𝄇` | 1D107 | Right repeat sign |
683| `𝄐` | 1D110 | Fermata |
684| `𝄜` | 1D11C | Six-string fretboard |
685| `𝄞` | 1D11E | G clef |
686| `𝄟` | 1D11F | G clef ottava alta |
687| `𝄠` | 1D120 | G clef ottava bassa |
688| `𝄡` | 1D121 | C clef |
689| `𝄢` | 1D122 | F clef |
690| `𝄣` | 1D123 | F clef ottava alta |
691| `𝄤` | 1D124 | F clef ottava bassa |
692| `𝄥` | 1D125 | Drum clef-1 |
693| `𝄦` | 1D126 | Drum clef-2 |
694| `𝇐` | 1D1D0 | Gregorian c clef |
695| `𝇑` | 1D1D1 | Gregorian f clef |
696| `𝄪` | 1D12A | Double sharp |
697| `𝄫` | 1D12B | Double flat |
698| `𝄴` | 1D134 | Common time |
699| `𝄻` | 1D13B | Whole rest |
700| `𝄼` | 1D13C | Half rest |
701| `𝄽` | 1D13D | Quarter rest |
702| `𝅗` | 1D157 | Void notehead |
703| `𝅘` | 1D158 | Notehead black |
704| `𝆒` | 1D192 | Crescendo |
705
706</details>
707
708<details>
709<summary><h4>Chess</h4></summary>
710
711| Grapheme | Code Point | Description |
712| --- | --- | --- |
713| `♔` | 2654 | White king |
714| `♕` | 2655 | White queen |
715| `♖` | 2656 | White rook |
716| `♗` | 2657 | White bishop |
717| `♘` | 2658 | White knight |
718| `♙` | 2659 | White pawn |
719| `♚` | 265A | Black king |
720| `♛` | 265B | Black queen |
721| `♜` | 265C | Black rook |
722| `♝` | 265D | Black bishop |
723| `♞` | 265E | Black knight |
724| `♟` | 265F | Black pawn |
725
726</details>
727
728<details>
729<summary><h4>Design</h4></summary>
730
731| Grapheme | Code Point | Description |
732| --- | --- | --- |
733| `•` | 2022 | Bullet |
734| `◎` | 25CE | Bullseye |
735| `◉` | 25C9 | Fisheye |
736| `⭘` | 2B58 | Heavy circle and arrows |
737| `✗` | 2717 | Ballot x |
738| `✓` | 2713 | Check mark |
739| `☐` | 2610 | Ballot box |
740| `☑` | 2611 | Ballot box with check |
741| `☒` | 2612 | Ballot box with x |
742| `✎` | 270E | Lower right pencil |
743| `✐` | 2710 | Upper right pencil |
744| `☛` | 261B | Black right pointing index |
745| `✥` | 2725 | Four club-spoked asterisk |
746| `✤` | 2724 | Heavy four balloon-spoked asterisk |
747| `✻` | 273B | Teardrop-spoked asterisk |
748| `✲` | 2732 | Open centre asterisk |
749| `✱` | 2731 | Heavy asterisk |
750
751</details>
752
753<details>
754<summary><h4>Block Elements</h4></summary>
755
756<https://www.unicode.org/charts/PDF/U2580.pdf>
757
758| Grapheme | Code Point | Description |
759| --- | --- | --- |
760| `▀` | 2580 | Upper half block |
761| `▁` | 2581 | Lower one eighth block |
762| `▂` | 2582 | Lower one quarter block |
763| `▃` | 2583 | Lower three eighths block |
764| `▄` | 2584 | Lower half block |
765| `▅` | 2585 | Lower five eighths block |
766| `▆` | 2586 | Lower three quarters block |
767| `▇` | 2587 | Lower seven eighths block |
768| `█` | 2588 | Full block |
769| `▉` | 2589 | Left seven eighths block |
770| `▊` | 258A | Left three quarters block |
771| `▋` | 258B | Left five eighths block |
772| `▌` | 258C | Left half block |
773| `▍` | 258D | Left three eighths block |
774| `▎` | 258E | Left one quarter block |
775| `▏` | 258F | Left one eighth block |
776| `▐` | 2590 | Right half block |
777| `░` | 2591 | Light shade |
778| `▒` | 2592 | Medium shade |
779| `▓` | 2593 | Dark shade |
780| `▔` | 2594 | Upper one eighth block |
781| `▕` | 2595 | Right one eighth block |
782| `▖` | 2596 | Quadrant lower left |
783| `▗` | 2597 | Quadrant lower right |
784| `▘` | 2598 | Quadrant upper left |
785| `▙` | 2599 | Quadrant upper left and lower left and lower right |
786| `▚` | 259A | Quadrant upper left and lower right |
787| `▛` | 259B | Quadrant upper left and upper right and lower left |
788| `▜` | 259C | Quadrant upper left and upper right and lower right |
789| `▝` | 259D | Quadrant upper right |
790| `▞` | 259E | Quadrant upper right and lower left |
791| `▟` | 259F | Quadrant upper right and lower left and lower right |
792
793</details>
794
795<details>
796<summary><h4>Control Pictures</h4></summary>
797
798<https://www.unicode.org/charts/PDF/U2400.pdf>
799
800| Grapheme | Code Point | Description |
801| --- | --- | --- |
802| `␀` | 2400 | Null |
803| `␁` | 2401 | Start of heading |
804| `␂` | 2402 | Start of text |
805| `␃` | 2403 | End of text |
806| `␄` | 2404 | End of transmission |
807| `␅` | 2405 | Enquiry |
808| `␆` | 2406 | Acknowledge |
809| `␇` | 2407 | Bell |
810| `␈` | 2408 | Backspace |
811| `␉` | 2409 | Horizontal tabulation |
812| `␊` | 240A | Line feed |
813| `␋` | 240B | Vertical tabulation |
814| `␌` | 240C | Form feed |
815| `␍` | 240D | Carriage return |
816| `␎` | 240E | Shift out |
817| `␏` | 240F | Shift in |
818| `␐` | 2410 | Data link escape |
819| `␑` | 2411 | Device control one |
820| `␒` | 2412 | Device control two |
821| `␓` | 2413 | Device control three |
822| `␔` | 2414 | Device control four |
823| `␕` | 2415 | Negative acknowledge |
824| `␖` | 2416 | Synchronous idle |
825| `␗` | 2417 | End of transmission bloCK |
826| `␘` | 2418 | Cancel |
827| `␙` | 2419 | End of medium |
828| `␚` | 241A | Substitute |
829| `␛` | 241B | Escape |
830| `␜` | 241C | File separator |
831| `␝` | 241D | Group separator |
832| `␞` | 241E | Record separator |
833| `␟` | 241F | Unit separator |
834| `␠` | 2420 | Space |
835| `␡` | 2421 | Delete |
836| `␢` | 2422 | Blank symbol |
837| `␣` | 2423 | Open box |
838| `` | 2424 | Newline |
839| `␥` | 2425 | Delete form two |
840| `␦` | 2426 | Substitute form two |
841
842</details>
843
844</details>
845
846</details>
847
848## Reference
849- <https://devdocs.io/javascript>
850- <https://stackoverflow.com/a/27331885/14822191>
851- <https://css-tricks.com/changing-emoji-skin-tones-programmatically>
852- <https://apps.timwhitlock.info/unicode/inspect>
853- <https://en.wikibooks.org/wiki/Unicode/List_of_useful_symbols>
854
855<!-- REFERENCE LINKS -->
856[cp]: https://en.wikipedia.org/wiki/Code_point
857[cu]: https://en.wikipedia.org/wiki/Character_encoding#Terminology
858[word]: https://en.wikipedia.org/wiki/Word_(computer_architecture)
859[grap]: https://en.wikipedia.org/wiki/Grapheme
860[ws]: https://en.wikipedia.org/wiki/Writing_system
861[zwnj]: https://en.wikipedia.org/wiki/Zero-width_non-joiner "Zero-width non-joiner"
862[bo]: https://en.wikipedia.org/wiki/Bidirectional_text#Overrides
863[gly]: https://en.wikipedia.org/wiki/Glyph
864[vs]: https://en.wikipedia.org/wiki/Variation_Selectors_(Unicode_block)
865[fzs]: https://en.wikipedia.org/wiki/Fitzpatrick_scale "Fitzpatrick scale"
866[est]: https://www.unicode.org/L2/L2014/14173r-emoji-skin-tone.pdf "Selectors for emoji skin tone"
867[cs]: https://en.wikipedia.org/wiki/Complex_text_layout "Complex text layout"
868[zwj]: https://en.wikipedia.org/wiki/Zero-width_joiner
869[zwjs]: https://unicode.org/emoji/charts/emoji-zwj-sequences.html
870[unistd]: https://unicode.org/standard/standard.html
871[str]: https://devdocs.io/javascript/global_objects/string
872[emoji]: https://github.com/flipeador/browser-scripts/tree/main/scripts/emojis