I am going to go ahead and answer this question using a simple solution that has been mentioned elsewhere using accsupp.

\documentclass{article}
\usepackage{accsupp}
\begin{document}

Here is something to paste into ChatGPT. If is is long enough
 \BeginAccSupp{method=escape,ActualText=users and students}%
  {users }%
 \EndAccSupp{}%
probably won't notice that something small was added.

\end{document}

Output:

While it doesn't do what I initially wanted in terms of other hidden Unicode characters, it does have the advantage of slipping in extra information that could go unnoticed. This was compiled in PdfLaTeX.

Answer from Kendall on Stack Exchange
🌐
Soscisurvey
soscisurvey.de β€Ί tools β€Ί view-chars.php
View non-printable unicode characters
Online tool to display non-printable characters that may be hidden in copy&pasted strings.
🌐
Invisible Characters
invisible-characters.com β€Ί view.html
Decode and view invisible, non-printable Unicode characters
This tool let's you decond and view invisible, non-printable Unicode characters hidden inside of a block of text. Just copy and paste your text (which contains invisible, non-printable Unicode characters) into the text box below and click the "View!" button. The tool will then show you the invisible characters in the text, along with their Unicode code points and names.
Discussions

How to display non-printable unicode characters?
It's a terminal emulator rendering issue rather than a Vim issue. What terminal emulator are you using? More on reddit.com
🌐 r/vim
19
11
October 20, 2025
Hide text from displaying using nonprintable unicode characters visible to ChatGPT - TeX - LaTeX Stack Exchange
I don't know if this is possible so this question might be quickly closed. Related to the questions here, here, and here. When text is hidden but selectable and searchable, once it is copy pasted the More on tex.stackexchange.com
🌐 tex.stackexchange.com
May 21, 2024
What is the range of Unicode Printable Characters? - Stack Overflow
In fact many 8-bit character sets have many non-consecutive ranges which are non-printable. See for example C0 and C1 controls. ... DEL was funnier when it was labeled RUBOUT (on the TTYs I used when starting out long ago). 2021-03-01T19:42:20.027Z+00:00 ... Save this answer. ... Show activity on this post. First, you should remove the word 'UTF8' in your question, it's not pertinent (UTF8 is just one of the encodings of Unicode... More on stackoverflow.com
🌐 stackoverflow.com
Why are these considered "Non-Printable ASCII Characters"?
u/blueboy714 - Your post was submitted successfully. Once your problem is solved, reply to the answer(s) saying Solution Verified to close the thread. Follow the submission rules -- particularly 1 and 2. To fix the body, click edit. To fix your title, delete and re-post. Include your Excel version and all other relevant information Failing to follow these steps may result in your post being removed without warning. I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns. More on reddit.com
🌐 r/excel
14
3
November 6, 2022
🌐
Invisible Character Viewer
invisiblecharacterviewer.com
Invisible Character Viewer (γ…€) - Copy & Detect Invisible Text
4Hover over highlighted characters to see their Unicode code point and character name. 5Use the checkbox to toggle the visibility of space characters. This online tool reveals and highlights non-printable characters that may be hidden in copy & pasted text, such as spaces, tabs, line breaks, ...
🌐
Reddit
reddit.com β€Ί r/vim β€Ί how to display non-printable unicode characters?
r/vim on Reddit: How to display non-printable unicode characters?
October 20, 2025 -

I recently came across this post about compromised VisualStudio extensions: https://www.koi.ai/blog/glassworm-first-self-propagating-worm-using-invisible-code-hits-openvsx-marketplace

As you can see, opening the "infected" file in vim doesn't show anything suspicious. However using more reveals the real content.

This is part of the content in hexadecimal:

00000050: 7320 3d20 6465 636f 6465 2827 7cf3 a085  s = decode('|...
00000060: 94f3 a085 9df3 a084 b6f3 a085 a9f3 a084  ................
00000070: b9f3 a084 b6f3 a084 a9f3 a085 96f3 a085  ................
00000080: 89f3 a084 a3f3 a084 baf3 a085 9cf3 a085  ................
00000090: 89f3 a085 88f3 a085 82f3 a085 9cf3 a084  ................
000000a0: b9f3 a084 b4f3 a084 a0f3 a085 97f3 a085  ................
000000b0: 84f3 a084 a2f3 a084 baf3 a085 a1f3 a085  ................

Setting the encoding to latin1 is the only option I've found that reveals the characters in vim (set encoding latin=1. Using set conceallevel, fileencoding=utf-t, list, listchars=, display+=uhex, binary, noeol, nofixeol, noemoji, search&replace this unicode character range, etc... doesn't work):

var decodedBytes = decode('|| ~E~T| ~E~]| ~D| ~E| ~D| ~D| ~D| ~E~V ....

setting set display+=uhex + set encoding=latin1:

var decodedBytes = decode('|οΏ½<a0><85><94>οΏ½<a0><85><9d>οΏ½<a0><84>οΏ½οΏ½<a0><85><a0><84><a0><84> ...

Once changed the encoding, I can search&replace these characters with :%s\%xf3/\\U00f3/g.

So the question is: how can I display these non-printable characters by default when opening a file, without changing the encoding manually?

🌐
Invisible Characters
invisible-characters.com
Unicode characters you can not see
In Unicode there are a lot of invisible, non-printable characters: regular white-space characters (e.g. U+0020 SPACE), language specific fillers (e.g. U+3164 HANGUL FILLER of the Korean Hangual alphabet), or special characters (e.g. U+2800 BRAILLE PATTERN BLANK).
🌐
Originality.AI
originality.ai β€Ί blog β€Ί invisible-text-detector-remover
Invisible Text Detector & Remover – Originality.AI
October 17, 2025 - Use this free tool to find and remove all hidden Unicode characters in your text. LLMs like ChatGPT can inject hidden characters like Em-Dash or Zero Width Space into text. This free tool helps identify them and remove the ones you don’t want
Find elsewhere
🌐
Lazar Shishmanov
lazarshishmanov.com β€Ί home β€Ί free tools β€Ί view non-printable unicode characters (ai scan)
View non-printable unicode characters (AI Scan) | Lazar Shishmanov
November 29, 2025 - Detect and highlight invisible Unicode characters in text with this free online tool. It helps you find zero-width spaces and other hidden symbols to verify the authenticity of content and identify AI-generated text.Sources
🌐
Qreativbox
qreativbox.com β€Ί 2020 β€Ί 02 β€Ί 14 β€Ί spaces-doing-strange-things-in-your-html-check-your-non-printable-unicode-characters
Spaces doing strange things in your HTML? Check your non-printable unicode characters. – qreativbox
Turns out that, somewhere in our collaborative workflow, spaces were being added as the Unicode character for β€˜NARROW NO-BREAK SPACE’. [That’s UTF code β€œU+202F” if you’re interested.] Obviously it’s difficult to spot an invisible character. The way I identified the problem was ...
🌐
Charactertext
charactertext.com
CharacterText - Character Text Processing Platform
CharacterText - Professional character text processing platform for invisible characters, blank space copy paste, unicode symbols, and text analysis tools.
🌐
Namecheap
namecheap.com β€Ί visual β€Ί font maker β€Ί whitespace
Whitespace Characters β€” Copy & Paste Invisible Characters
Copy and paste blank Unicode characters like the zero-width space and braille blank β€” and learn about when to use them.
🌐
GitHub
github.com β€Ί BurninLeo β€Ί see-non-printable-characters
GitHub - BurninLeo/see-non-printable-characters Β· GitHub
This is a very small PHP script to recognize and display Unicode characters that are otherwise invisible.
Starred by 182 users
Forked by 58 users
Languages Β  PHP
🌐
Lovable
char-whisperer-reveal.lovable.app
View and Clean Invisible Unicode Characters – Free Online Tool
Detect and visualize invisible or non-printable unicode characters in your text. Free online tool to debug copy-pasted strings.
🌐
KNIME
knime.com β€Ί blog β€Ί how-to-find-remove-invisible-unicode-characters
Invisible Characters in Your Data: How to Find and Remove Hidden Unicode Characters | KNIME
April 27, 2026 - Remove characters (letters, numbers, punctuation, symbols, emojis or custom characters) Clean up whitespace (remove all, leading, trailing, or duplicate whitespace) Handle line breaks and special whitespace (keep, replace with space, or remove) Change casing and pad strings (uppercase, lowercase, capitalize, pad to minimum length) To use it: connect the String Cleaner to your data, select the target columns, and enable "Remove non-printable characters" and "Remove special whitespace" (or replace with standard space, depending on your needs).
🌐
DEV Community
dev.to β€Ί maboyadak β€Ί how-hidden-unicode-characters-can-break-your-system-2fd7
🧩 How hidden unicode characters can break your system - DEV Community
March 19, 2026 - This revealed the unexpected Unicode character before the digits. The fix was to sanitize the input and remove non-digit characters.
🌐
Enea
clean-non-printable-unicode-chars.enea.tech
Clean Non-Printable Unicode Characters
⚠️ Warning This tool removes non-printable characters including various spaces and control characters.
Top answer
1 of 9
26

See, http://en.wikipedia.org/wiki/Unicode_control_characters

You might want to look especially at C0 and C1 control character http://en.wikipedia.org/wiki/C0_and_C1_control_codes

The wiki says, the C0 control character is in the range U+0000β€”U+001F and U+007F (which is the same range as ASCII) and C1 control character is in the range U+0080β€”U+009F

other than C-control character, Unicode also has hundreds of formatting control characters, e.g. zero-width non-joiner, which makes character spacing closer, or bidirectional text control. This formatting control characters are rather scattered.

More importantly, what are you doing that requires you to know Unicode's non-printable characters? More likely than not, whatever you're trying to do is the wrong approach to solve your problem.

2 of 9
23

This is an old question, but it is still valid and I think there is more to usefully, but briefly, say on the subject than is covered by existing answers.

Unicode

Unicode defines properties for characters.

One of these properties is "General Category" which has Major classes and subclasses. The Major classes are Letter, Mark, Punctuation, Symbol, Separator, and Other.

By knowing the properties of your characters, you can decide whether you consider them printable in your particular context.

You must always remember that terms like "character" and "printable" are often difficult and have interesting edge-cases.


Programming Language support

Some programming languages assist with this problem.

For example, the Go language has a "unicode" package which provides many useful Unicode-related functions including these two:

func IsGraphic(r rune) bool

IsGraphic reports whether the rune is defined as a Graphic by Unicode. Such  
characters include letters, marks, numbers, punctuation, symbols, and spaces, 
from categories L, M, N, P, S, Zs. 

func IsPrint(r rune) bool

IsPrint reports whether the rune is defined as printable by Go. Such  
characters include letters, marks, numbers, punctuation, symbols, and  
the ASCII space character, from categories L, M, N, P, S and the ASCII  
space character. This categorization is the same as IsGraphic except  
that the only spacing character is ASCII space, U+0020.

Notice that it says "defined as printable by Go" not by "defined as printable by Unicode". It is almost as if there are some depths the wizards at Unicode dare not plumb.


Printable

The more you learn about Unicode, the more you realise how unexpectedly diverse and unfathomably weird human writing systems are.

In particular whether a particular "character" is printable is not always obvious.

Is a zero-width space printable? When is a hyphenation point printable? Are there characters whose printability depends on their position in a word or on what characters are adjacent to them? Is a combining-character always printable?


Footnotes

ASCII printable character range is \u0020 - \u007f

No it isn't. \u007f is DEL which is not normally considered a printable character. It is, for example, associated with the keyboard key labelled "DEL" whose earliest purpose was to command the deletion of a character from some medium (display, file etc).

In fact many 8-bit character sets have many non-consecutive ranges which are non-printable. See for example C0 and C1 controls.

🌐
ASCII Table
asciitable.com
ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal
Ascii character table - What is ascii - Complete tables including hex, octal, html, decimal conversions
🌐
Webatic
webatic.com β€Ί quoted-printable-convertor
Encode/Decode Quoted Printable - Webatic
HTML Entities convertor, URL convertor, Base64 convertor, Encoding Explorer Β· The current character set/encoding is Unicode (utf-8) Afrikaans (iso-8859-1) Albanian (iso-8859-1) Arabic (win1256) Azerbaijani (iso-8859-9) Basque (iso-8859-1) Belarusian (win1251) Bosnian (win1250) Portuguese ...
🌐
ASCII Table
ascii-code.com
ASCII table - Table of ASCII codes, characters and symbols
The first 32 characters in the ASCII-table are unprintable control codes and are used to control peripherals such as printers. Codes 32-127 are common for all the different variations of the ASCII table, they are called printable characters, represent letters, digits, punctuation marks, and ...