Skip to main content
Develop Tools
← Return to usage guide

Character and byte count tool | Complete guide to usage, settings, and troubleshooting

Although 𝐀 appears as one character, JavaScript String.length returns 2. The remaining character count can differ for the same display depending on which unit the service uses for limits.

Diagram showing 𝐀 as 1 Grapheme, 1 Code Point, 2 UTF-16 code units, and 4 UTF-8 bytes
Diagram showing 𝐀 as 1 Grapheme, 1 Code Point, 2 UTF-16 code units, and 4 UTF-8 bytes

Count graphemes, code points, UTF-16, and UTF-8

Use the character count tool to check visible character count, Unicode Code Points, UTF-16 code units, and UTF-8 bytes at the same time.

Conclusion: Recount the converted string in the same unit used by the destination

Many Mathematical Alphanumeric Symbols are in the supplementary planes, and one code point is represented by two UTF-16 surrogate-pair units. Combining marks increase the number of code points themselves.

Whether an SNS or Application uses Graphemes, Code Points, UTF-16, or UTF-8 Bytes varies by service. Do not assume; also check the actual input field.

Unless the specification explicitly defines what “one character” means, frontend and backend length-limit checks may differ.

Identify the unit of the limit

Count the same string in groups of four and check which value matches the destination counter.

In databases, check UTF-8 bytes, index length, and 4-byte encoding support in addition to character limits.

ItemHow to checkjudgment
GraphemeIntl.SegmenterVisual character count
Code PointArray.from/for...ofUnicode character count
UTF-16String.lengthJavaScript length
UTF-8TextEncoderStorage / communication Bytes

Steps for meeting the character-count limit

  1. Save the normal characters and the converted string.
  2. Paste the converted Text into the character count tool.
  3. Record grapheme, code point, UTF-16, and UTF-8 counts.
  4. Verify against the actual counter at the destination.
  5. If the limit is exceeded, reduce the decoration range or character count.

Do not directly adopt the pre-conversion ASCII character count.

The amount of expansion differs by style

Input/outputGraphemeCode PointUTF-16
A111
𝐀112
122
👩‍💻135

Replace with Unicode characters rather than changing CSS fonts

MethodStringsThings that change internally
CSS FontA → AKeep U+0041 and render the Glyph differently with a Font
Fancy UnicodeA → 𝐀Replace the Code Point itself from U+0041 to U+1D400
Combining marksA → A̲Add a Combining Low Line after U+0041

Mathematical Alphanumeric Symbols are a set of characters defined to distinguish meanings in mathematical expressions. Stylish text for social media often uses them for decoration; it is not copying CSS font-family.

Use NFC, NFD, NFKC, and NFKD for distinct purposes

FormatMain processingEffect on decorative characters
NFCCompose characters where possible after canonical decompositionAlign canonically equivalent representations, but do not convert all decorations back to ASCII
NFDCanonical DecompositionThere is an example of decomposing é into e and Combining Acute Accent
NFKCCompose after compatibility decomposition𝐀, 𝔸, A, ①, and similar characters may become A or 1.
NFKDCompatibility DecompositionDecompose compatibility characters, which can further become combining sequences

NFKC is a way to make some stylish characters closer to ordinary alphanumeric characters, but it is not a general reverse conversion that fully restores upside-down characters, small-cap approximation characters, combining underlines, and similar forms. Do not apply it automatically to data that requires preserving its original notation.

Distinguish character count by graphemes, code points, and UTF-16.

Counting methodValue of 𝐀Purpose
Grapheme Cluster1The number of characters visually recognized by the user
Unicode Code Point1(U+1D400)Character assignment numbers and Unicode processing
JavaScript String.length2 UTF-16 Code UnitsJavaScript indexes and existing input limits
UTF-84 BytesStorage capacity for databases, APIs, files, and communications

Combining characters and ZWJ emoji can appear as one grapheme even when they contain multiple code points. To count visible characters in JavaScript, use Intl.Segmenter; to count code points, use for...of or Array.from rather than relying only on split("").

What DevelopTools can verify and cannot verify

ItemCurrent tool operation
InputConvert primarily letters and numbers, while leaving Japanese, emoji, line breaks, and unsupported symbols unchanged rather than deleting them
21 stylesSerif and sans-serif bold and italic, monospace, script, Fraktur, double-struck, circled, squared, small caps, superscript and subscript, upside-down text, strikethrough, and underline
Unicode processingWhen Intl.Segmenter is available, process by grapheme cluster; when unavailable, Array.from still does not split surrogate pairs
Display confirmationShow the number of converted and target characters for each style to make unsupported characters easier to find
SaveSupports copying each result, saving TXT, favorites, and sorting recently copied styles
UnsupportedFull-width and enclosed forms, general reverse conversion, NFC/NFD/NFKC/NFKD execution, Unicode name and code point analysis, mixed-script/confusable detection
Data retentionDo not send input text or conversion results to the server, and do not save them in LocalStorage. Save only display settings and favorites on the device.

To restore text to ordinary alphanumeric characters, compare normalization results, or analyze code points, also use a Unicode code table. To compare character counts, UTF-8 bytes, and UTF-16 code units, use a character-count tool.

Check display compatibility, searchability, and accessibility.

  • If the destination font lacks the glyph, it may appear as a box or blank space, so paste it into the actual device and application to verify
  • Even if text can be displayed in a profile body, it may not meet the allowed-character, length, or normalization rules for a username or ID
  • For important information that needs search, screen reading, voice input, or editing after copying, also provide ordinary characters
  • Do not mix visually similar Latin, Greek, Cyrillic, and other characters in identifiers or use them for impersonation or misidentification
  • Do not use decorative Unicode in Passwords, URLs, Email Addresses, Source Code, or data to be signed.

What DevelopTools can display does not guarantee that the same glyph appears in every OS, SNS, browser, and application. Platform specifications change, so it does not claim that a character will always work in a specific service.

Primary sources for Unicode and JavaScript

Use UAX #15 for normalization, UAX #29 for grapheme clusters, and UTS #39 for confusables and identifier security. Compare JavaScript implementations against MDN explanations for String.length, normalize(), and Intl.Segmenter.

Example: convert 10 ASCII characters to mathematical bold

Even if the visual appearance is 10 characters, UTF-16 may use two units per Latin letter.

The result may be Grapheme=10, Code Point=10, and UTF-16=20.

  1. Measure before conversion.
  2. Convert to bold
  3. Measure again after conversion.
  4. Check against the input limit.

If the backend has a UTF-8 byte limit, UTF-16 values alone cannot determine compliance.

Frequently asked questions

Will converted characters display the same way on every device?
Cannot guarantee. Even with a correct Code Point, it displays as □ if the OS or Application Font lacks the Glyph, and glyph shapes also differ by Font. Check actual display at the destination.
Is the entered text sent to or stored on the Server?
The current special-character and fancy-text conversion tool converts in the Browser and does not save input text or results to the Server or LocalStorage. Only display settings and favorites are stored on the device.
Will running NFKC always restore ordinary characters?
Only characters with defined compatibility decomposition can be restored. Upside-down text, lookalike characters, custom Mappings, combining decorations, and more may not be restored Losslessly, so retain the original string.