Zero-width character test
Below are several zero-width Unicode characters, placed between underscores. Can your browser display them? Your text editor? Your terminal? To understand why not being able to display them might be a problem, read Tracking via pasted text or about the Trojan Source vulnerability.
This page also contains unassigned code points and various control characters which certain programs render as zero-width even though they shouldn't.
As a point of reference, here are a few positive-width characters:
0020: _ _ | 00E9: _é_ | 03A9: _Ω_ | 5B57: _字_ | 1F407: _🐇_
Zero-width characters
00AD: __ soft hyphen
034F: _͏_ combining grapheme joiner
061C: __ Arabic letter mark
070F: __ Syriac abbreviation mark
115F: _ᅟ_ Hangul choseong filler
1160: _ᅠ_ Hangul jungseong filler
17B4: _឴_ Khmer vowel inherent aq
17B5: _឵_ Khmer vowel inherent aa
180B: _᠋_ Mongolian free variation selector one (FVS1)
180C: _᠌_ Mongolian free variation selector two (FVS2)
180D: _᠍_ Mongolian free variation selector three (FVS3)
180E: __ Mongolian vowel separator
180F: _᠏_ Mongolian free variation selector four (FVS4)
200B: __ zero width space
200C: __ zero width non-joiner
200D: __ zero width joiner
200E: __ left-to-right mark
200F: __ right-to-left mark
2028: _
_ line separator
2029: _
_ paragraph separator
202A: __ left-to-right embedding
202B: __ right-to-left embedding
202C: __ pop directional formatting
202D: __ left-to-right override
202E: __ right-to-left override
2060: __ word joiner
2061: __ function application
2062: __ invisible times
2063: __ invisible separator
2064: __ invisible plus
2065: __ unassigned
2066: __ left-to-right isolate
2067: __ right-to-left isolate
2068: __ first strong isolate
2069: __ pop directional isolate
206A: __ inhibit symmetric swapping (deprecated)
206B: __ activate symmetric swapping (deprecated)
206C: __ inhibit arabic form shaping (deprecated)
206D: __ activate arabic form shaping (deprecated)
206E: __ national digit shapes (deprecated)
206F: __ nominal digit shapes (deprecated)
3164: _ㅤ_ Hangul filler
FE00: _︀_ variation selector-1 (VS1)
FE01: _︁_ variation selector-2 (VS2)
FE02: _︂_ variation selector-3 (VS3)
FE03: _︃_ variation selector-4 (VS4)
FE04: _︄_ variation selector-5 (VS5)
FE05: _︅_ variation selector-6 (VS6)
FE06: _︆_ variation selector-7 (VS7)
FE07: _︇_ variation selector-8 (VS8)
FE08: _︈_ variation selector-9 (VS9)
FE09: _︉_ variation selector-10 (VS10)
FE0A: _︊_ variation selector-11 (VS11)
FE0B: _︋_ variation selector-12 (VS12)
FE0C: _︌_ variation selector-13 (VS13)
FE0D: _︍_ variation selector-14 (VS14)
FE0E: _︎_ variation selector-15 (VS15)
FE0F: _️_ variation selector-16 (VS16)
FEFF: __ zero width no-break space
FFA0: _ᅠ_ halfwidth Hangul filler
FFF0: __ unassigned
FFF1: __ unassigned
FFF2: __ unassigned
FFF3: __ unassigned
FFF4: __ unassigned
FFF5: __ unassigned
FFF6: __ unassigned
FFF7: __ unassigned
FFF8: __ unassigned
FFF9: __ interlinear annotation anchor
FFFA: __ interlinear annotation separator
FFFB: __ interlinear annotation terminator
FFFC: __ object replacement character
FFFE: __ <not a character>
FFFF: __ <not a character>
13430: __ Egyptian hieroglyph vertical joiner
13431: __ Egyptian hieroglyph horizontal joiner
13432: __ Egyptian hieroglyph insert at top start
13433: __ Egyptian hieroglyph insert at bottom start
13434: __ Egyptian hieroglyph insert at top end
13435: __ Egyptian hieroglyph insert at bottom end
13436: __ Egyptian hieroglyph overlay middle
13437: __ Egyptian hieroglyph begin segment
13438: __ Egyptian hieroglyph end segment
13439: __ Egyptian hieroglyph insert at middle
1343A: __ Egyptian hieroglyph insert at top
1343B: __ Egyptian hieroglyph insert at bottom
1343C: __ Egyptian hieroglyph begin enclosure
1343D: __ Egyptian hieroglyph end enclosure
1343E: __ Egyptian hieroglyph begin walled enclosure
1343F: __ Egyptian hieroglyph end walled enclosure
1BCA0: __ shorthand format letter overlap
1BCA1: __ shorthand format continuing overlap
1BCA2: __ shorthand format down step
1BCA3: __ shorthand format up step
1D159: _𝅙_ musical symbol null notehead
1D173: __ musical symbol begin beam
1D174: __ musical symbol end beam
1D175: __ musical symbol begin tie
1D176: __ musical symbol end tie
1D177: __ musical symbol begin slur
1D178: __ musical symbol end slur
1D179: __ musical symbol begin phrase
1D17A: __ musical symbol end phrase
E0000: __ unassigned
E0001: __ language tag (deprecated)
E0002: __ unassigned
... (E0002-E0019 unassigned)
E0019: __ unassigned
E0020: __ tag space
... (E0020-E007F formerly used for tagging texts by language)
E007F: __ cancel tag
E0080: __ unassigned
... (E0080-E00FF unassigned)
E00FF: __ unassigned
E0100: _󠄀_ variation selector 17
... (E0100-E01EF: variation selectors supplement)
E01EF: _󠇯_ variation selector 256
E01F0: __ unassigned
... (E01F0-E0FFF unassigned)
E0FFF: __ unassigned
EFFFD: __ unassigned
EFFFE: __ <not a character>
EFFFF: __ <not a character>
10FFFD: __ unassigned (private use)
10FFFE: __ <not a character>
10FFFF: __ <not a character>
Not included: samples from unassigned ranges *FF80-*FFFF
, with the exception of EFF80-EFFFF
, a sample of which is included.
ASCII control codes
00: _ _ null
01: __ start of heading
02: __ start of text
03: __ end of text
04: __ end of transmission
05: __ enquiry
06: __ acknowledge
07: __ bell
08: __ backspace
0B: __ line tabulation (vertical tabulation)
0C: __ form feed
0E: __ shift out
0F: __ shift in
10: __ data link escape
11: __ device control one
12: __ device control two
13: __ device control three
14: __ device control four
15: __ negative acknowledge
16: __ synchronous idle
17: __ end of transmission block
18: __ cancel
19: __ end of medium
1A: __ substitute
1B: __ escape
1C: __ information separator four (file separator)
1D: __ information separator three (group separator)
1E: __ information separator two (record separator)
1F: __ information separator one (unit separator)
7F: __ delete
80: __
81: __
82: __ break permitted here
83: __ no break here
84: __ formerly known as "index"
85: _
_ next line
86: __ start of selected area
87: __ end of selected area
88: __ character tabulation set
89: __ character tabulation with justification
8A: __ line tabulation set
8B: __ partial line forward
8C: __ partial line backward
8D: __ reverse line feed
8E: __ single shift two
8F: __ single shift three
90: __ device control string
91: __ private use one
92: __ private use two
93: __ set transmit state
94: __ cancel character
95: __ message waiting
96: __ start of guarded area
97: __ end of guarded area
98: __ start of string
99: __
9A: __ single character introducer
9B: __ control sequence introducer
9C: __ string terminator
9D: __ operating system command
9E: __ privacy message
9F: __ application program command
Thin space characters
0020:
_ _ space [for comparison]205F:
_ _ medium mathematical space (MMSP)202F:
_ _ narrow no-break space2006:
_ _ six-per-em space2009:
_ _ thin space200A:
_ _ hair space
For more details about each character, consult the Unicode Character Properties utility or the Unicode Character Name Index.
Since September 2023, Unicode is at version 15.1 and contains 149,813 characters.
Programs which pass the test
- cat - when used with the "-v" option
Programs whitch almost pass the test
- Dillo
- Less - when used with the "-U" option
- Vim
- https://github.com/BurninLeo/see-non-printable-characters
Contact me if you know of any other characters or programs that should be listed here.
This test is also available as a plain .txt file.