Why text from AI chats looks messy when you paste it
Many AI assistants, ChatGPT among them, write their answers in markdown. It is a simple way to describe formatting with plain characters: a pound sign starts a heading, two asterisks make text bold, a hyphen starts a list item and pipes draw a table. The chat window reads those symbols and shows you nice formatting. Copy the raw answer, use an API, or save it as a .md file, and you get the symbols instead.
That is only half of it. Pasted text can also carry typographic characters that look almost like the keys on your keyboard: curly quotes and apostrophes, long dashes, the single ellipsis character and non-breaking hyphens. And it can contain characters you cannot see at all: zero width spaces, word joiners, soft hyphens, direction marks and special spaces such as the no-break space or the narrow no-break space. Search features can add their own extras, like citation markers and tracking tags at the end of links. ChatGPT, for example, adds utm_source=chatgpt.com to the links it sends readers to.
The AI text cleaner removes all of that in one pass and gives you plain text that behaves like text you typed yourself. It does not rewrite anything. Every word stays the same.
What each option changes
Every option shows how many changes it made in your text, so you can see what happened and turn off anything you want to keep.
| Option | Before | After |
|---|---|---|
| Headings | ## Pricing | Pricing |
| Bold and italics | **Note:** use *one* folder | Note: use one folder |
| List markers | * First item | - First item, • First item or First item |
| Links | [the guide](https://example.com) | the guide, or the guide (https://example.com) |
| Code marks | `npm run build` | npm run build |
| Tables | | Plan | Price | | Plan and Price separated by a tab, or Plan: Basic; Price: $10 |
| Blockquotes | > Tip: save often | Tip: save often |
| Invisible characters | a word with a zero width space inside | the same word without it |
| Odd spaces | 10 km with a no-break space | 10 km with a normal space |
| Smart quotes | “Hi,” it’s | "Hi," it's |
| Long dashes | The tool (em dash) free and fast (em dash) works offline | The tool, free and fast, works offline |
| Ellipsis | Wait… | Wait... |
| Citation markers | rates rose 3%[1] | rates rose 3% |
Lines that only draw a horizontal rule are removed, trailing spaces go, and runs of blank lines shrink to a single blank line. Emoji removal is off by default because many people want to keep them. When you turn it on, whole emoji are removed, including family emoji, flags and skin tones, while symbols like © and arrows stay.
Two choices need a word of explanation. For long dashes you can pick a comma or a hyphen with spaces. The comma reads most naturally in emails and posts; the spaced hyphen keeps the pause of the original. A dash used for a range, as in 10 to 20 written with a dash, always becomes a plain hyphen. For tables, tab-separated rows paste straight into separate columns in Excel or Google Sheets, while plain lines turn each row into a readable sentence like Plan: Basic; Price: $10.
Where pasted markdown and hidden characters cause trouble
- Word and Google Docs. When the text arrives as raw markdown, the asterisks and pound signs land in your document and you have to delete them one by one.
- Email. If your email app does not turn markdown into formatting, the reader sees **bold** with the stars.
- Social posts. Where a post box does not read markdown, the symbols go out as they are. A post on LinkedIn, Facebook, Instagram or X full of asterisks and pound signs looks pasted, because it was.
- CMS fields and online forms. In product descriptions, profile bios and support tickets that accept plain text only, markdown shows up literally, and hidden characters can make a field fail its check for no visible reason.
- Code and data. A no-break space or a curly quote in a command, a config file, a CSV or JSON file can make it fail, often with an error that points at a line that looks perfectly fine.
- Search and counting. A word with a zero width space inside, or written with a non-breaking hyphen, does not match a normal search. Word and character counts come out wrong, too.
How to check text for invisible characters
Paste the text into the box above. The panel below the options lists every hidden character and special space it found, with its short name, Unicode code point and count, and shows your text with each one marked in place. That way you see exactly where they were, not just that there were some.
Other ways to check: in Microsoft Word, turn on Show/Hide (the ¶ button) to see spaces, tabs and other formatting marks. VS Code highlights uncommon invisible characters in code files by default. And if a character counter reports more characters than you can see, something is hiding. To look for one specific character, you can use our find and replace tool with a regular expression.
Tips and limits
- It cleans formatting, not wording. The cleaner does not paraphrase, does not make text undetectable and does not "humanize" anything. Your wording and style stay exactly as they were.
- Math and names stay safe. 2*3*4, a*b, file_name.txt, snake_case_names and anything inside a URL keep their symbols. Only markers at the edges of words count as formatting.
- Code keeps its symbols. Text inside code fences and backticks is not treated as markdown, so asterisks, underscores, pound signs and blank lines stay. Only the fences and backticks go. Hidden characters and curly quotes are still fixed there, because they break code.
- Emoji and other scripts stay intact. Joiners that build emoji like 👩💻 and joiners that Persian, Hindi and other scripts need inside words are kept.
- Mixed right-to-left text. If your text mixes Arabic or Hebrew with English, direction marks may be there on purpose. Turn off Invisible characters and check the list first.
- Read the result once. Markdown written by a model is not always tidy. A stray asterisk or an unclosed bold marker is left alone rather than guessed at.
How to use the AI text cleaner
- 1Paste the answer from ChatGPT, Claude, Gemini or another AI chat into the left box. The clean plain text appears on the right while you type.
- 2Look at the counts next to each option and at the hidden characters panel. Turn off anything you want to keep, and pick how bullets, dashes and tables should look.
- 3Copy the clean text or download it as a .txt file. Copy link to settings saves your choices for next time, without your text.
Frequently asked questions
Why does text from ChatGPT have asterisks and pound signs in it?
Many chatbots, ChatGPT among them, write their answers in markdown, a plain-text format where **two asterisks** mean bold and a # at the start of a line means a heading. The chat window turns those symbols into formatting. When the raw text reaches an app that does not understand markdown, such as an email, a social post or a form field, the symbols show up as they are. This tool removes them and keeps the words.
What are zero width spaces and why are they in my text?
A zero width space is a Unicode character that takes up no room on screen. It, and relatives like the word joiner, the soft hyphen and direction marks, can end up in text copied from web pages, documents and apps. You cannot see them, but they break searches, word counts, code and some form fields. The cleaner lists every one it finds and removes them.
Will cleaned text pass an AI detector?
This tool does not try to. It removes formatting and invisible characters and never changes a word, so your wording and style stay exactly as they were. If you need text that sounds like you, edit the wording yourself.
Does the cleaner change my wording?
No. It only touches formatting symbols, hidden characters, spaces, quotes, dashes, ellipses, citation markers and, if you turn it on, emoji. Every word stays where it was. With long dashes set to comma, a dash between two parts of a sentence becomes a comma, which is a punctuation change, not a new word.
Are hidden characters a secret AI watermark?
This tool cannot tell where a hidden character came from. A text watermark like Google SynthID Text works differently: it nudges which words the model picks while it writes, so it is not something a character cleaner can see or remove. Whatever their source, hidden characters cause real problems, and the tool shows you exactly which ones were in your text.
Why are 2*3*4 and snake_case_names left alone?
In real text, an asterisk between two numbers is usually multiplication and underscores inside a word are part of a name. The cleaner only treats * and _ as italics at the edges of words, so math, file names, variable names and URLs keep their symbols. Text inside backticks and code blocks is never treated as markdown.
Is my text uploaded anywhere?
No. All cleaning runs in your browser. Your text is not sent to a server, not stored and not shared. Copy link saves only your option settings, never the text.