text string Unicode text to process, limited to 512 UTF-16 code units. Use exactly one of text or utf16.
Inspect UTF-16 and Unicode scalar values, apply the four standard normalization forms, and segment text into graphemes, words or sentences.
Authoritative reference data or standards computation
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
text | string | allowed: 1 – 512 example: Café 👩💻 | Unicode text to process, limited to 512 UTF-16 code units. Use exactly one of text or utf16. |
utf16 | string | allowed: 4 – 2559 example: 0041,D83D,DC4B | Comma-separated four-digit hexadecimal UTF-16 code units; this form can represent unpaired surrogates. Use exactly one input. |
text string Unicode text to process, limited to 512 UTF-16 code units. Use exactly one of text or utf16.
utf16 string Comma-separated four-digit hexadecimal UTF-16 code units; this form can represent unpaired surrogates. Use exactly one input.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
fields | list | example: input,source | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: codePoints | Return all fields except these (comma-separated). |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
input | string | Resolved input string, including any unpaired surrogate code units. | A👋 |
source | string | Input parameter used: text or utf16. | utf16 |
codeUnitLength | integer | Number of UTF-16 code units in input. | 3 |
scalarValueCount | integer | Number of Unicode scalar values; unpaired surrogates are excluded. | 2 |
unpairedSurrogateCount | integer | Number of isolated UTF-16 high or low surrogate code units. | 0 |
wellFormed | boolean | True when input contains no unpaired UTF-16 surrogates. | true |
codePoints | object[] | Ordered scalar values or isolated surrogates with code-point notation and UTF-16 offsets. | [{"character":"👋","codePoint":"U+1F44B","decimal":128075,"utf16":["D83D","DC4B"],"codeUnitStart":1,"codeUnitLength":2,"isScalar":true}] |
input string Resolved input string, including any unpaired surrogate code units.
example: A👋
source string Input parameter used: text or utf16.
example: utf16
codeUnitLength integer Number of UTF-16 code units in input.
example: 3
scalarValueCount integer Number of Unicode scalar values; unpaired surrogates are excluded.
example: 2
unpairedSurrogateCount integer Number of isolated UTF-16 high or low surrogate code units.
example: 0
wellFormed boolean True when input contains no unpaired UTF-16 surrogates.
example: true
codePoints object[] Ordered scalar values or isolated surrogates with code-point notation and UTF-16 offsets.
example: [{"character":"👋","codePoint":"U+1F44B","decimal":128075,"utf16":["D83D","DC4B"],"codeUnitStart":1,"codeUnitLength":2,"isScalar":true}]
/api/unicode/inspect?text=e%CC%81%20%F0%9F%91%8B {
"data": {
"input": "é 👋",
"source": "text",
"codeUnitLength": 5,
"scalarValueCount": 4,
"unpairedSurrogateCount": 0,
"wellFormed": true,
"codePoints": [
{
"character": "e",
"codePoint": "U+0065",
"decimal": 101,
"utf16": [
"0065"
],
"codeUnitStart": 0,
"codeUnitLength": 1,
"isScalar": true
},
{
"character": "́",
"codePoint": "U+0301",
"decimal": 769,
"utf16": [
"0301"
],
"codeUnitStart": 1,
"codeUnitLength": 1,
"isScalar": true
},
{
"character": " ",
"codePoint": "U+0020",
"decimal": 32,
"utf16": [
"0020"
],
"codeUnitStart": 2,
"codeUnitLength": 1,
…
"generatedAt": "2026-07-30T15:14:08.000Z"
}
} /api/unicode/inspect?utf16=0041%2CD800%2C0042 {
"data": {
"input": "A\ud800B",
"source": "utf16",
"codeUnitLength": 3,
"scalarValueCount": 2,
"unpairedSurrogateCount": 1,
"wellFormed": false,
"codePoints": [
{
"character": "A",
"codePoint": "U+0041",
"decimal": 65,
"utf16": [
"0041"
],
"codeUnitStart": 0,
"codeUnitLength": 1,
"isScalar": true
},
{
"character": "\ud800",
"codePoint": "U+D800",
"decimal": 55296,
"utf16": [
"D800"
],
"codeUnitStart": 1,
"codeUnitLength": 1,
"isScalar": false
},
{
"character": "B",
"codePoint": "U+0042",
"decimal": 66,
"utf16": [
"0042"
],
"codeUnitStart": 2,
"codeUnitLength": 1,
…
"generatedAt": "2026-07-30T15:14:08.000Z"
}
} | Parameter | Type | Default & allowed | Description |
|---|---|---|---|
text | string | allowed: 1 – 512 example: Café 👩💻 | Unicode text to process, limited to 512 UTF-16 code units. Use exactly one of text or utf16. |
utf16 | string | allowed: 4 – 2559 example: 0041,D83D,DC4B | Comma-separated four-digit hexadecimal UTF-16 code units; this form can represent unpaired surrogates. Use exactly one input. |
form | enum | default: NFC allowed: NFC | NFD | NFKC | NFKD example: NFD | Unicode normalization form to apply. |
text string Unicode text to process, limited to 512 UTF-16 code units. Use exactly one of text or utf16.
utf16 string Comma-separated four-digit hexadecimal UTF-16 code units; this form can represent unpaired surrogates. Use exactly one input.
form enum Unicode normalization form to apply.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
fields | list | example: input,source | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: wellFormed | Return all fields except these (comma-separated). |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
input | string | Resolved original string. | é |
source | string | Input parameter used: text or utf16. | text |
form | string | Applied normalization form. | NFC |
normalized | string | Normalized output string. | é |
changed | boolean | Whether normalization changed the UTF-16 sequence. | true |
inputCodeUnits | integer | Original UTF-16 code-unit length. | 2 |
outputCodeUnits | integer | Normalized UTF-16 code-unit length. | 1 |
inputScalarValues | integer | Original Unicode scalar-value count. | 2 |
outputScalarValues | integer | Normalized Unicode scalar-value count. | 1 |
inputUnpairedSurrogates | integer | Original isolated-surrogate count. | 0 |
outputUnpairedSurrogates | integer | Normalized isolated-surrogate count. | 0 |
wellFormed | boolean | Whether both input and output contain no unpaired surrogates. | true |
input string Resolved original string.
example: é
source string Input parameter used: text or utf16.
example: text
form string Applied normalization form.
example: NFC
normalized string Normalized output string.
example: é
changed boolean Whether normalization changed the UTF-16 sequence.
example: true
inputCodeUnits integer Original UTF-16 code-unit length.
example: 2
outputCodeUnits integer Normalized UTF-16 code-unit length.
example: 1
inputScalarValues integer Original Unicode scalar-value count.
example: 2
outputScalarValues integer Normalized Unicode scalar-value count.
example: 1
inputUnpairedSurrogates integer Original isolated-surrogate count.
example: 0
outputUnpairedSurrogates integer Normalized isolated-surrogate count.
example: 0
wellFormed boolean Whether both input and output contain no unpaired surrogates.
example: true
/api/unicode/normalize?text=e%CC%81&form=NFC {
"data": {
"input": "é",
"source": "text",
"form": "NFC",
"normalized": "é",
"changed": true,
"inputCodeUnits": 2,
"outputCodeUnits": 1,
"inputScalarValues": 2,
"outputScalarValues": 1,
"inputUnpairedSurrogates": 0,
"outputUnpairedSurrogates": 0,
"wellFormed": true
},
"meta": {
"endpoint": "unicode",
"route": "/normalize",
"params": {
"text": "é",
"form": "NFC"
},
"generatedAt": "2026-07-30T15:14:08.000Z"
}
} /api/unicode/normalize?text=%EF%BC%B2%EF%BD%81%EF%BD%8E%EF%BD%84%EF%BD%8F%EF%BD%8D&form=NFKC {
"data": {
"input": "Random",
"source": "text",
"form": "NFKC",
"normalized": "Random",
"changed": true,
"inputCodeUnits": 6,
"outputCodeUnits": 6,
"inputScalarValues": 6,
"outputScalarValues": 6,
"inputUnpairedSurrogates": 0,
"outputUnpairedSurrogates": 0,
"wellFormed": true
},
"meta": {
"endpoint": "unicode",
"route": "/normalize",
"params": {
"text": "Random",
"form": "NFKC"
},
"generatedAt": "2026-07-30T15:14:08.000Z"
}
} | Parameter | Type | Default & allowed | Description |
|---|---|---|---|
text | string | allowed: 1 – 512 example: Café 👩💻 | Unicode text to process, limited to 512 UTF-16 code units. Use exactly one of text or utf16. |
utf16 | string | allowed: 4 – 2559 example: 0041,D83D,DC4B | Comma-separated four-digit hexadecimal UTF-16 code units; this form can represent unpaired surrogates. Use exactly one input. |
granularity | enum | default: grapheme allowed: grapheme | word | sentence example: word | Boundary type used by Intl.Segmenter. |
language | enum | default: en allowed: en | da | de | fr | es | it | pt | ja example: da | Requested locale used for locale-sensitive boundary rules. |
text string Unicode text to process, limited to 512 UTF-16 code units. Use exactly one of text or utf16.
utf16 string Comma-separated four-digit hexadecimal UTF-16 code units; this form can represent unpaired surrogates. Use exactly one input.
granularity enum Boundary type used by Intl.Segmenter.
language enum Requested locale used for locale-sensitive boundary rules.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
fields | list | example: input,source | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: segments | Return all fields except these (comma-separated). |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
input | string | Resolved original string. | Hello world! |
source | string | Input parameter used: text or utf16. | text |
granularity | string | Requested segmentation granularity. | word |
requestedLocale | string | Locale requested through language. | en |
resolvedLocale | string | Locale selected by the JavaScript runtime. | en |
count | integer | Number of returned segments. | 4 |
segments | object[] | Segments with UTF-16 start offsets and word-likeness where applicable. | [{"segment":"Hello","index":0,"isWordLike":true}] |
input string Resolved original string.
example: Hello world!
source string Input parameter used: text or utf16.
example: text
granularity string Requested segmentation granularity.
example: word
requestedLocale string Locale requested through language.
example: en
resolvedLocale string Locale selected by the JavaScript runtime.
example: en
count integer Number of returned segments.
example: 4
segments object[] Segments with UTF-16 start offsets and word-likeness where applicable.
example: [{"segment":"Hello","index":0,"isWordLike":true}]
/api/unicode/segment?text=%F0%9F%91%A8%E2%80%8D%F0%9F%91%A9%E2%80%8D%F0%9F%91%A7%E2%80%8D%F0%9F%91%A6%21&granularity=grapheme {
"data": {
"input": "👨👩👧👦!",
"source": "text",
"granularity": "grapheme",
"requestedLocale": "en",
"resolvedLocale": "en",
"count": 2,
"segments": [
{
"segment": "👨👩👧👦",
"index": 0,
"isWordLike": null
},
{
"segment": "!",
"index": 11,
"isWordLike": null
}
]
},
"meta": {
"endpoint": "unicode",
"route": "/segment",
"params": {
"text": "👨👩👧👦!",
"granularity": "grapheme",
"language": "en"
},
"generatedAt": "2026-07-30T15:14:08.000Z"
}
} /api/unicode/segment?text=Hej%20verden%21&granularity=word&language=da {
"data": {
"input": "Hej verden!",
"source": "text",
"granularity": "word",
"requestedLocale": "da",
"resolvedLocale": "da",
"count": 4,
"segments": [
{
"segment": "Hej",
"index": 0,
"isWordLike": true
},
{
"segment": " ",
"index": 3,
"isWordLike": false
},
{
"segment": "verden",
"index": 4,
"isWordLike": true
},
{
"segment": "!",
"index": 10,
"isWordLike": false
}
]
},
"meta": {
"endpoint": "unicode",
"route": "/segment",
"params": {
"text": "Hej verden!",
"granularity": "word",
"language": "da"
},
"generatedAt": "2026-07-30T15:14:08.000Z"
}
} Bounded Unicode tools backed by the JavaScript runtime's standards-defined string, normalization and Intl.Segmenter behavior. /inspect walks UTF-16 without hiding malformed input: surrogate pairs become one scalar value, while isolated high or low surrogates remain visible with isScalar=false and make wellFormed=false.
/normalize applies NFC, NFD, NFKC or NFKD as specified by Unicode Standard Annex #15 and reports whether the string changed. Canonical forms compose or decompose canonically equivalent sequences; compatibility forms can also fold presentation distinctions. Normalization is not transliteration, case folding or sanitization.
/segment uses Intl.Segmenter, whose grapheme, word and sentence boundaries follow Unicode text segmentation rules together with the selected locale. Segment indexes are UTF-16 code-unit offsets, matching JavaScript string indexing. Use the hexadecimal utf16 input when a test must include an unpaired surrogate that cannot safely travel as ordinary URL text.
A BMP scalar uses one UTF-16 code unit, while a supplementary scalar such as many emoji uses a two-unit surrogate pair. An isolated surrogate is a code unit but not a Unicode scalar value.
NFC, NFD, NFKC and NFKD are supported through the runtime's standards-defined String.normalize implementation.
Intl.Segmenter applies Unicode grapheme-boundary rules, so sequences such as flags, skin-tone emoji and many zero-width-joiner emoji are treated as user-perceived units.
They are zero-based UTF-16 code-unit offsets, the same indexing model used by JavaScript strings.
Random English words by part of speech — nouns, verbs, adjectives or adverbs — with working length filters, seedable output and honest 400s when nothing fits.
All 183 active ISO 639 two-letter language codes with matching terminology and bibliographic three-letter codes, searchable with exact lookups.
Strict RFC 4648 base16, base32, base64 and base64url encoding/decoding with Unicode-safe UTF-8, padding control and malformed-input errors.
Random usernames in four distinct styles — handle, gamer, professional, anonymous — with a maxLength that is honored by construction, never by truncation.
Hostile-but-safe text fixtures: RTL, bidi controls, CJK width, combining marks, ZWJ emoji, zero-width and length bombs — plus pseudo-localization.
UTS #39 skeletons, mixed-script and identifier-status checks: whether two usernames or domains are visual lookalikes, and which characters differ.