Visual RFC.
ALL RFCs / RFC 7493
Read the RFC ↗
RFC 7493 / Internet JSON interoperability

Send UTF-8 and valid Unicode characters

01

I-JSON means Internet JSON: a JSON profile for predictable exchange between different programs. Its encoding and character rules apply beyond JSON grammar.

RFC 7493 · § 2.1EXAMPLE
4 / 4
Send UTF-8 and valid Unicode charactersTwo separate string-member examples fail: unpaired surrogate DEAD and noncharacter FFFF. Their paths stop before chosen acceptance.A shared JSON interoperability profile{"x":"\uDEAD"}: unpaired surrogate{"x":"\uFFFF"}: noncharacterForbidden string-member charactersEscaping does not bypass the constraintChosen receiver stops before acceptanceI-JSON = Internet JSON · extra interoperability constraints
04
Stop a forbidden string member

Separate examples {"x":"\uDEAD"} and {"x":"\uFFFF"} fail the published string-member constraints before a chosen receiver accepts the value.

Source for this drawing: RFC 7493 · Read RFC section 2.1 ↗

Protocol participantThreat or exceptionProtocol controlSimplified drawings · precise section references
New to this? Start hereA quick picture + helpful background

First, agree how to read the message.

An encoding tells a reader how to interpret bytes. A format tells it how values fit together. Correctly reading a value does not make that value trustworthy.

Helpful first, if these ideas are unfamiliar

These pictures are analogies to help you learn. The linked RFC explains the actual rules.

Related RFCs and changes

“Updates” changes part of an earlier RFC. “Obsoletes” replaces it. This list shows selected related documents.

KEY POINT

JSON syntax alone does not guarantee an interoperable message.

  • I-JSON is short for Internet JSON. RFC7493 defines restricted JSON messages for interoperable Internet protocols, not a new transport, schema language, media type or canonical signature format (§§1–2). Published March2015, it remains Proposed Standard; official metadata lists no Updates, Updated by, Obsoletes or Obsoleted by.
  • I-JSON messages MUST use UTF-8 (§2.1). The example {"text":"é"} uses bytes c3 a9 for é, rather than a native Latin-1 byte e9. This is an encoding requirement, not a requirement to escape every non-ASCII character. UTF-8 does not normalize Unicode text.
  • Object member names and string values in arrays and object members MUST NOT contain Unicode surrogate code points or noncharacters (§2.1). Escapes are included: an unpaired \uDEAD is invalid there, while the paired \uD800\uDEAD represents the permitted scalar U+102AD. UTF-16 code units in an escape pair are not two prohibited scalar characters.
  • Noncharacters include U+FDD0–U+FDEF and the final two code points of each Unicode plane, for example U+FFFE and U+10FFFF. A syntactically valid JSON string can still violate this profile. Escaping a forbidden character does not make it acceptable (§2.1).
  • Reported technical erratum6861 proposes removing the published qualification about string values in arrays/object members, to cover an entire top-level string explicitly. It is unverified. This guide states the published scope; its bounded helper additionally rejects forbidden characters in top-level strings as an explicitly stricter local policy. No normalization or character substitution is used.
DETAILS

Offline illustrative messages and bounded helpers, not a production parser, full calendar validator or authentication protocol. Reported errata are not adopted as verified corrections.

Read the RFC section ↗

All chapters in RFC 7493

Drawing view

Scroll the drawing to see every part. Playback controls stay above it.

RFC 9700 / CHAPTERS

Chapters

For full details, tables, algorithms, and exceptions, read the original RFC.

RFC status and corrections ↗