Break text into characters and read each one's code points, byte length and escapes, with the invisible characters called out.
U+0042
U+0065
U+0073
U+0074
U+0065
U+0020
U+0055
U+0049
U+200B
zero-width space
U+0020
U+0073
U+0068
U+0069
U+0070
U+0073
U+0020
U+0062
U+006C
U+006F
U+0063
U+006B
U+0073
U+0020
U+0079
U+006F
U+0075
U+0020
U+006F
U+0077
U+006E
U+0021
U+0020
U+1F44B U+1F3FD
Beste UI\u200B ships blocks you own! \uD83D\uDC4B\uD83C\uDFFD
Usually an invisible character: a zero-width space, a no-break space or a byte order mark from a copy and paste. They are highlighted here, which is normally the whole reason to open this page.
Because a reader sees one character and the string holds several. A flag or an emoji with a skin tone is a grapheme cluster; the segmentation here follows what a person would count.
Pasting into source safely. Anything outside printable ASCII is written as a \u escape, which survives a file with the wrong encoding and makes an invisible character visible in review.