You paste some text and see little rectangles, question-mark diamonds, or gaps that will not behave. Those are not random glitches. They are real characters your app cannot display. Here is the explanation and the fix.
What the boxes and gaps actually are
When an app cannot render a character, it shows a placeholder: a box (sometimes with the character's code inside), a question mark in a diamond, or just an unexpected gap. The usual suspects:
- Zero-width and invisible characters, which the app cannot draw, so it shows a box or nothing.
- Non-breaking spaces and exotic spaces, which create gaps that look like spacing bugs.
- Direction marks, used for right-to-left text, which can shift things around unexpectedly.
- Characters outside the font, where the chosen font has no glyph, so a fallback box appears.
These pile into your clipboard when you copy from web pages, PDFs, word processors, and AI tools.
Why it happens more with AI and web text
Styled sources insert these characters for layout and formatting. ChatGPT output, copied web content, and PDF text are common sources. The characters are invisible where you copied them, so you do not notice until you paste somewhere that cannot render them.
How to fix it
- Paste as plain text first (
Ctrl/Cmd + Shift + V). This removes styling but may leave the invisible characters. - Run it through a cleaner to remove the invisible characters and normalize the odd spaces. This is the step that actually removes the boxes, because the characters causing them live inside the text.
textscrubr does the second step in your browser and shows you a count of exactly what it removed, so you can confirm the boxes are gone and see what was hiding there.
How to prevent it
If you paste from the same sources often, clean the text before it lands in the document, email, or code where the boxes show up. It turns a recurring mystery into a one-step habit.
Quick diagnosis
If the gap or box appears in one app but not another, it is almost certainly an invisible character that the second app happens to render and the first does not. Cleaning the text removes it everywhere, so it renders consistently no matter where it goes.