Character Counter

Because "one character" is four different numbers.

Runs locally

Runs entirely in your browser — open DevTools and check the Network tab

0Characters (with spaces)Counted as Unicode code points
0Characters (no spaces)
0Chinese / Japanese / Korean characters
0Words
0Characters you can seeEmoji sequences and accented pairs count as one
0UTF-16 code unitsWhat String.length and most databases report
0UTF-8 bytes
0Ideographic spaces
0Invisible characters
0Lines
0Sentences

What the text is made of

KindCountShare
CJK0
Latin letters0
Digits0
Punctuation and symbols0
Whitespace0
Other0

Paste text and get every count that anything might be asking you for: code points, UTF-16 units, visible characters and UTF-8 bytes, with and without spaces. They are not the same number, and the one you need depends on what is enforcing the limit.

Why "how many characters" has more than one answer

A code point is one entry in the Unicode catalogue. A UTF-16 code unit is how JavaScript, Java, C# and most databases store that entry internally — and characters above U+FFFF, which includes every emoji and the rarer CJK extension ideographs, take two units each. A grapheme is what a reader would point at and call one character, which can be several code points glued together. A UTF-8 byte is what actually travels over the network and occupies disk.

For plain English all four numbers are identical, which is why most counters only report one and never mention the distinction. The moment your text contains an emoji, an accented letter typed on a Mac, or a single Chinese character, they diverge — and a tool that gives you one number without telling you which one it is has given you a number you cannot act on.

Which number the thing you are pasting into is counting

Form fields with a maxlength attribute, and most database VARCHAR columns declared in characters, count UTF-16 code units. That is why a field that accepts 20 letters can reject 15 emoji. Columns declared in bytes — common in older systems and in some MySQL configurations — count UTF-8 bytes, and one Chinese character is three of those, so a "30 byte" column holds ten Chinese characters, not thirty.

Publishing contracts, translation quotes and academic limits usually specify characters excluding spaces, and that is the second number on this page. Social platforms count in their own way: some weight full-width characters as two, and some count a link as a fixed length regardless of how long the URL is. When a limit really matters, count with the definition the enforcer uses rather than the one that flatters your draft.

The characters you cannot see

Text copied from a web page, a PDF or a word processor frequently carries passengers: zero-width spaces used for line-break hints, soft hyphens, byte-order marks, right-to-left marks, and the ideographic space U+3000 that Chinese and Japanese input methods produce. All of them are counted by every length check and none of them are visible to you.

This page reports them as their own figure, because they are the usual explanation for a mystery. Two strings that look identical failing an equality test, a duplicate row that will not de-duplicate, a search that returns nothing for a term you can see on screen, a form that rejects input that looks well within the limit — that is nearly always an invisible character, and the ideographic space in particular survives code that trims only ASCII whitespace.

The same word, stored two ways

An accented letter can be one code point or two: the precomposed form, or a plain letter followed by a combining mark. Both render identically. macOS filesystems historically preferred the decomposed form while Windows and most web input produce the precomposed one, so the same filename can arrive in two different encodings and compare as unequal.

When the two figures on this page disagree — code points against visible characters — that is what you are looking at. The fix is to normalise both sides to the same form before comparing, and the character-by-character view in our Unicode inspector will show you exactly where the extra code points are.

Counted here, not on a server

The counting is a handful of string operations running in this tab. There is no upload, no queue and no size limit beyond your own memory, and the page keeps working with your network disconnected — which is the simplest proof that nothing is being sent.

That matters for this particular tool because of what people paste into it: draft contracts under a length limit, job applications, exam answers, internal announcements, product copy before launch. A server-side counter receives all of it. This one cannot.

Frequently asked questions

Why is my emoji counted as two?

Because it is stored as a surrogate pair — two UTF-16 code units for one code point. This page shows both figures, plus the visible-character count, so you can see which limit will bite.

Why does this differ from the character count in Word?

Word reports its own definition and handles CJK and spaces its own way. If a limit is being enforced by a person opening your file in Word, count in Word; use this page when the limit is enforced by code.

How many bytes is a Chinese character?

Three in UTF-8, and four for the rarer extension ideographs. Byte-limited fields therefore hold far less Chinese text than their number suggests, which is why the UTF-8 byte total is on this page.

Are spaces included?

Both figures are given. The no-spaces count excludes every kind of whitespace, including the ideographic space U+3000 that ASCII-only trimming leaves behind.

Is my text uploaded?

No. Counting runs in JavaScript in this tab. Open DevTools, watch the Network tab and type — no request is made, and the page still counts with the network switched off.