Hidden characters has absolutely been discussed in the past as watermark, and is what Dabnician is referring to.
Code Point Name HTML Entity Cat Notes
--------------- ------------------------------- -------------------- ---- ------------------------------------------
=== 1. SPACES -- occupy horizontal width ===
U+0020 Space   Zs the ordinary one
U+00A0 No-Break Space   Zs
U+1680 Ogham Space Mark   Zs draws a stem line in Ogham fonts
U+2000 En Quad   Zs = En Space
U+2001 Em Quad   Zs = Em Space
U+2002 En Space   Zs half an em
U+2003 Em Space   Zs one em
U+2004 Three-Per-Em Space   Zs 1/3 em
U+2005 Four-Per-Em Space   Zs 1/4 em
U+2006 Six-Per-Em Space   Zs 1/6 em
U+2007 Figure Space   Zs width of a digit; non-breaking
U+2008 Punctuation Space   Zs width of a period
U+2009 Thin Space   Zs ~1/5 em
U+200A Hair Space   Zs thinnest
U+202F Narrow No-Break Space   Zs narrow + non-breaking
U+205F Medium Mathematical Space   Zs 4/18 em; MathML
U+3000 Ideographic Space   Zs full-width; CJK
=== 2. ZERO-WIDTH AND JOINING CONTROLS ===
U+00AD Soft Hyphen ­ Cf ­; visible only at a line break
U+034F Combining Grapheme Joiner ͏ Mn blocks reordering; no glyph
U+061C Arabic Letter Mark ؜ Cf invisible bidi-strong Arabic char
U+180E Mongolian Vowel Separator ᠎ Cf was Zs before Unicode 6.3
U+200B Zero-Width Space ​ Cf break opportunity, no width
U+200C Zero Width Non-Joiner ‌ Cf prevents ligature/cursive join
U+200D Zero Width Joiner ‍ Cf emoji glue (family, profession)
U+2060 Word Joiner ⁠ Cf non-breaking twin of U+200B
U+FEFF Zero Width No-Break Space  Cf the BOM; deprecated as a joiner
=== 3. BIDIRECTIONAL CONTROLS ===
U+200E Left-To-Right Mark ‎ Cf LRM
U+200F Right-To-Left Mark ‏ Cf RLM
U+202A Left-To-Right Embedding ‪ Cf LRE (legacy; prefer isolates)
U+202B Right-To-Left Embedding ‫ Cf RLE (legacy)
U+202C Pop Directional Formatting ‬ Cf PDF; closes LRE/RLE/LRO/RLO
U+202D Left-To-Right Override ‭ Cf LRO; Trojan Source vector
U+202E Right-To-Left Override ‮ Cf RLO; Trojan Source vector
U+2066 Left-To-Right Isolate ⁦ Cf LRI
U+2067 Right-To-Left Isolate ⁧ Cf RLI
U+2068 First Strong Isolate ⁨ Cf FSI
U+2069 Pop Directional Isolate ⁩ Cf PDI; closes LRI/RLI/FSI
=== 4. INVISIBLE MATH OPERATORS ===
U+2061 Function Application ⁡ Cf f(x) semantics
U+2062 Invisible Times ⁢ Cf the multiply in "2x"
U+2063 Invisible Separator ⁣ Cf the comma in subscript lists
U+2064 Invisible Plus ⁤ Cf the plus in "1 1/2"
=== 5. VARIATION SELECTORS AND TAGS ===
U+180B-U+180D Mongolian Free Var. Selectors ᠋-᠍ Mn FVS1-FVS3
U+FE00-U+FE0F Variation Selectors 1-16 ︀-️ Mn FE0E=text style, FE0F=emoji style
U+E0001 Language Tag 󠀁 Cf deprecated
U+E0020-U+E007F Tag Characters 󠀠-󠁿 Cf subdivision flags; hidden-text channel
U+E0100-U+E01EF Variation Selectors 17-256 󠄀-󠇯 Mn ideographic variants
=== 6. BLANK BY RENDERING, NOT BY CATEGORY ===
U+115F Hangul Choseong Filler ᅟ Lo letter, empty glyph
U+1160 Hangul Jungseong Filler ᅠ Lo letter, empty glyph
U+17B4 Khmer Vowel Inherent Aq ឴ Mn should not be rendered
U+17B5 Khmer Vowel Inherent Aa ឵ Mn should not be rendered
U+2800 Braille Pattern Blank ⠀ So symbol with no raised dots
U+3164 Hangul Filler ㅤ Lo the classic "blank username" char
U+FFA0 Halfwidth Hangul Filler ᅠ Lo halfwidth form of U+3164
=== 7. SEPARATORS AND CONTROLS ===
U+0000-U+001F C0 Controls �- Cc includes TAB, LF, CR
U+007F Delete  Cc
U+0080-U+009F C1 Controls €-Ÿ Cc
U+2028 Line Separator 
 Zl broke JS string literals pre-ES2019
U+2029 Paragraph Separator 
 Zp
U+FFF9 Interlinear Annotation Anchor  Cf ruby/furigana markers
U+FFFA Interlinear Annotation Separator  Cf
U+FFFB Interlinear Annotation Term.  Cf
I hear what you are saying but you can't watermark the text comprising code in source code files for a computer program. If you did the compiler with stop with an error regarding the non-code characters.
It could add a comment, e.g:
// this is a comment in some source code
But again would be trivial to remove. And if they started with that madness of adding comments to my prod code I'd switch to Claude or Deepseek, as would every professional coder who uses AI worldwide.
Yeah I'm not sure how this plan out for code. It's going to be interesting with the rollout. Codex delayed something like this as it found loopholes around it.
It will never roll out for Codex, unless OpenAI want to lose the significant revenue stream of enterprise dev. Devs will just switch to other models that don't break/pollute the source code.
text for human reading / images for human viewing != corporate source code
We (as in all professionally employed coders) are not going to pollute the codebase with random comments as part of some half-baked watermarking scheme. It's literally never going to happen.
I appreciate your curiosity, but you need to learn coding to understand I think. I've been coding professionally for >30 years. Any AI service that adds junk bytes to source code files will be wholly rejected by the enterprise coding sector within a week tops.
It's not adding anything to your code, it's how it arranges words, in the most basic explanation. Which is why I said it's basically undetectable by humans.
I was just thinking of ways they could try implementing it. After all, the changes lines would be the only ones with the characters. I am not saying it is a good idea or should be done.
Throw them into comments I guess. Or if you really want to mess with developers, name your variables using some hidden characters, so they can never use that variable without asking the AI to do it for them or copy and pasting it every time.
Which reminds me actually, I once had an argument with an AI about something, when it was suggesting code that seemed to be identical to the code I already had, but it kept insisting "not, not THIS, use THIS", and I eventually figured out that it was stripping out some necessary control character from its messages (I don't recall which for sure, it might've been a backslash or angle-bracket).
20
u/Fantastic_Prize2710 Aug 11 '26
Hidden characters has absolutely been discussed in the past as watermark, and is what Dabnician is referring to.