Input
OutputNFC
Inspection rail — every codepoint the normalizer touched
No differences yet — paste text above.
0
Input codepoints
0
Output codepoints
0
Codepoints changed
0
Length delta
NFC/NFD change how accented characters are stored (one codepoint vs. base + combining mark). NFKC/NFKD go further and fold compatibility variants like full-width digits or ligatures into their plain equivalents. This runs entirely in your browser; nothing is uploaded.

Unicode Normalizer for LLM Text

A Unicode normalizer converts text into one consistent byte form. Two strings that look identical also match at the code point level. This matters most for text copied from ChatGPT, Claude, Gemini, Grok, and DeepSeek. These tools often carry hidden characters that break string comparison, search, and LLM preprocessing.

Last updated: July 2026

You copy text from ChatGPT. It looks perfect on screen. You paste it into your code editor, and a string comparison fails for no reason you can see. The cause is almost never a typo. It is Unicode normalization, and most writers have never heard of it. This page explains what it is and why AI chat tools cause it. It also shows you how to fix it with the free Unicode Normalizer for LLM Text.

What Is Unicode Normalization?

Quick Answer Unicode normalization converts text into one consistent form, so comparisons and searches work the way you expect. The same visible character can be stored as different code points. That is why identical looking text can fail exact matches.

Every character you see on screen is stored as one or more code points. A code point is a number that a computer uses to represent a letter, symbol, or mark.

Here is the strange part. The letter é can be stored two different ways. It can be one single code point. Or it can be two code points combined, a plain e plus a separate accent mark. Both display the exact same way. Both are different at the byte level.

This is why two strings can look identical and still fail a match test. Unicode normalization converts text into one consistent form. That way, comparisons and searches work the way you expect. Text copied from AI chats often carries non-printing characters too, which you can spot with the invisible character checker.

The Four Unicode Normalization Forms

There are four official forms. Each one solves a slightly different problem.

FormNameWhat It DoesExample
NFCCanonical CompositionCombines characters into their shortest forme + ́ → é
NFDCanonical DecompositionBreaks composed characters into base plus marksé → e + ́
NFKCCompatibility CompositionComposes, then folds style variants into plain formfi → f i
NFKDCompatibility DecompositionDecomposes, then folds style variants into plain formⅧ → VIII

NFC and NFD in Practice

NFC is the safest default for general use. Most text you see online already uses this form. NFD is useful when you need to strip accents from text, since you can filter out the marks after decomposition.

NFD (Decomposed)
Café (e + combining acute accent, two code points)
Looks identical to NFC on screen, but stored as two separate code points
NFC (Composed)
Café (one single code point for é)
Same visible text, one code point, matches most stored web content

NFKC and NFKD Go Further

NFKC folds special formatting variants into plain equivalents. A full width digit becomes a normal digit. A ligature like fi becomes two separate letters, f and i. NFKD combines both ideas. It decomposes characters into parts and also folds compatibility variants. A superscript number like ² becomes a plain 2, similar to what you’d get from the superscript and subscript generator in reverse. This form is the most aggressive, and the most useful for search and deduplication.

Why AI Chat Tools Produce Broken Unicode

ChatGPT, Claude, Gemini, Grok, and DeepSeek all inject characters you cannot see. Zero width spaces sit between words without adding any visible gap. Non breaking spaces look like normal spaces but behave differently when a line needs to wrap. Bidirectional control characters manage text direction and can hide inside a string with no visual trace at all — the kind of thing the invisible character checker is built to catch.

None of these characters are typos. They come from how these chat interfaces render and copy text in the browser. You cannot catch them by reading the text, because they were never meant to be seen.

You can run any text through the Unicode Normalizer for LLM Text. It shows you every code point that gets touched. The tool flags each change and shows the exact character behind it. Nothing stays hidden.

How Broken Unicode Affects String Comparison

Search systems and databases rely on exact matches. Your input text and your stored text might use different Unicode forms. If so, a match can fail even though both strings read the same.

This matters for deduplication. Two entries can look identical in a spreadsheet and still count as separate rows in a database. The cause is simple. One uses NFC and the other uses NFD.

It also matters for search indexing. A search engine that indexes one form will miss a query written in a different form. This happens even when both represent the same word.

Unicode Normalization in LLM Preprocessing

Large language models split text into tokens before they process it. Tokenization treats different Unicode forms as different inputs, even when a human reader sees no difference at all.

This has a real cost. Unnormalized text increases vocabulary size, since the same word in two different byte forms counts as two separate tokens. That raises token count, and it can weaken how well a model generalizes across similar inputs.

Case folding and accent handling face the same problem. A training pipeline that skips normalization can treat café and cafe as unrelated entries. This happens even in contexts where they should be treated the same. This is why preprocessing pipelines normalize text before tokenization, not after. Encoding mismatches can compound the issue further, which is where a garbled text and mojibake fixer comes in handy for salvaging already-corrupted strings.

Where Broken Text Causes Real Problems

Hidden Unicode does not stay contained to one place. It follows your text into every tool you paste it into. Aicleanertext.com has separate tools built for each of these problems.

Code and JSON Files
A zero width space in a variable name looks like a logic bug
Normalized text parses correctly and matches expected values
WordPress and Gutenberg
Hidden characters can crash block structure after pasting AI text
Clean text pastes and saves without content errors
Google Docs and Notion
Non breaking spaces wrap lines differently across devices
Consistent wrapping and spacing everywhere the text goes
Search and Databases
A single hidden character makes identical entries count as different
Deduplication and form validation work as expected

How to Normalize AI Text Before You Paste It

Fixing this takes three steps. Everything runs in your browser. Nothing is uploaded, and nothing is stored.

1

Paste Your AI Generated Text

Copy output from ChatGPT, Claude, Gemini, Grok, or any other LLM. Paste it into the Unicode Normalizer for LLM Text, or browse aicleanertext.com if something else is off with your text.

2

Pick a Normalization Form

Use NFC for general use, NFD for accent stripping, or NFKC and NFKD for full compatibility folding.

3

Review and Copy the Result

The inspection rail flags every code point that changes, along with its position and original value. Copy or download the clean text once you are satisfied.

NFC vs NFD vs NFKC vs NFKD: Which Should You Use?

FormBest For
NFCMost everyday tasks, including web content and general text storage
NFDStripping accents from names or search terms
NFKCFolding visual variants into plain text before storing it
NFKDSearch indexes and deduplication systems that need aggressive normalization

Frequently Asked Questions

Answers to the most common questions about normalizing AI text.

Does normalization change the meaning of my text?

No. Every operation changes how a character is stored, not what it represents. A normalized é still reads as é.

Why do two identical looking strings fail a match?

They likely use different Unicode forms. One may be composed, the other decomposed. Normalizing both to the same form fixes the comparison.

Does Unicode normalization affect file size?

Slightly. NFD and NFKD forms use more code points per character, since they break composed characters apart. NFC and NFKC are usually more compact.

Which Unicode form does ChatGPT use by default?

Output generally displays as composed characters, but hidden characters like zero width spaces can still slip through regardless of form. Normalizing after copying is still worth doing.