“How many characters” has three answers, and they only agree on plain English.
Characters are what a person counts. Code units are what JavaScript’s .length returns. Bytes are what a database column limit counts.
The peso sign is one character, one code unit and three bytes. An emoji is one character, two code units and four bytes.
So a form validating length with .length against a byte-limited column accepts text the database then refuses — and the failure lands nowhere near the form. That is why all three are shown.
Because “how many characters” has three answers and they only agree on plain English. Characters are what a person counts. Code units are what JavaScript’s .length returns. Bytes are what a database column limit counts. The peso sign is one character, one code unit and three bytes; an emoji is one character, two code units and four bytes.
Because a form that validates length in code units against a byte-limited database column will accept text the database then refuses — and the failure appears nowhere near the form. If you are checking against a limit, check which unit the limit is in.
At 200 words a minute, which is a common estimate for an adult reading silently. Speaking time is shown separately at 130, because reading aloud is slower and it is a different question. Both are rough — the rate varies enormously with the material and the reader.
By counting runs ending in a full stop, question mark or exclamation mark, plus a final run with no terminator. It is an estimate: an abbreviation ending in a full stop is counted as a sentence ending, and getting that exactly right needs a dictionary. It is reported as an estimate rather than presented as a fact.
A run of text separated by a blank line. A single line break is a wrapped line, not a new paragraph, and treating every newline as a paragraph break gives a wildly inflated count on any text that was hard-wrapped.
No. Everything is counted in your browser and nothing is transmitted or stored.
Counting by code point is still not counting by character: it splits a family emoji into six. Intl.Segmenter is the right tool.
A paragraph is separated by a blank line, not by any line break. A wrapped line is not a new paragraph, and treating it as one gives a wildly inflated count on hard-wrapped text.
Counted in your browser; nothing is transmitted. Sentence counts are an estimate — an abbreviation ending in a full stop is read as a sentence ending. Reading and speaking times are rough averages. Nothing you type here is sent to our servers — the calculation runs entirely in your browser.