UTF-8, a transformation format of ISO 10646
RFC 2279

Document Type RFC - Draft Standard (January 1998; No errata)
Obsoleted by RFC 3629
Obsoletes RFC 2044
Was draft-yergeau-utf8-rev (individual)
Last updated 2013-03-02
Stream Legacy
Formats plain text pdf html bibtex
Stream Legacy state (None)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state RFC 2279 (Draft Standard)
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                       F. Yergeau
Request for Comments: 2279                           Alis Technologies
Obsoletes: 2044                                           January 1998
Category: Standards Track

              UTF-8, a transformation format of ISO 10646

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1998).  All Rights Reserved.

Abstract

   ISO/IEC 10646-1 defines a multi-octet character set called the
   Universal Character Set (UCS) which encompasses most of the world's
   writing systems. Multi-octet characters, however, are not compatible
   with many current applications and protocols, and this has led to the
   development of a few so-called UCS transformation formats (UTF), each
   with different characteristics.  UTF-8, the object of this memo, has
   the characteristic of preserving the full US-ASCII range, providing
   compatibility with file systems, parsers and other software that rely
   on US-ASCII values but are transparent to other values. This memo
   updates and replaces RFC 2044, in particular addressing the question
   of versions of the relevant standards.

1.  Introduction

   ISO/IEC 10646-1 [ISO-10646] defines a multi-octet character set
   called the Universal Character Set (UCS), which encompasses most of
   the world's writing systems.  Two multi-octet encodings are defined,
   a four-octet per character encoding called UCS-4 and a two-octet per
   character encoding called UCS-2, able to address only the first 64K
   characters of the UCS (the Basic Multilingual Plane, BMP), outside of
   which there are currently no assignments.

   It is noteworthy that the same set of characters is defined by the
   Unicode standard [UNICODE], which further defines additional
   character properties and other application details of great interest
   to implementors, but does not have the UCS-4 encoding.  Up to the

Yergeau                     Standards Track                     [Page 1]
RFC 2279                         UTF-8                      January 1998

   present time, changes in Unicode and amendments to ISO/IEC 10646 have
   tracked each other, so that the character repertoires and code point
   assignments have remained in sync.  The relevant standardization
   committees have committed to maintain this very useful synchronism.

   The UCS-2 and UCS-4 encodings, however, are hard to use in many
   current applications and protocols that assume 8 or even 7 bit
   characters.  Even newer systems able to deal with 16 bit characters
   cannot process UCS-4 data. This situation has led to the development
   of so-called UCS transformation formats (UTF), each with different
   characteristics.

   UTF-1 has only historical interest, having been removed from ISO/IEC
   10646.  UTF-7 has the quality of encoding the full BMP repertoire
   using only octets with the high-order bit clear (7 bit US-ASCII
   values, [US-ASCII]), and is thus deemed a mail-safe encoding
   ([RFC2152]).  UTF-8, the object of this memo, uses all bits of an
   octet, but has the quality of preserving the full US-ASCII range:
   US-ASCII characters are encoded in one octet having the normal US-
   ASCII value, and any octet with such a value can only stand for an
   US-ASCII character, and nothing else.

   UTF-16 is a scheme for transforming a subset of the UCS-4 repertoire
   into pairs of UCS-2 values from a reserved range.  UTF-16 impacts
   UTF-8 in that UCS-2 values from the reserved range must be treated
   specially in the UTF-8 transformation.

   UTF-8 encodes UCS-2 or UCS-4 characters as a varying number of
   octets, where the number of octets, and the value of each, depend on
   the integer value assigned to the character in ISO/IEC 10646.  This
   transformation format has the following characteristics (all values
   are in hexadecimal):

   -  Character values from 0000 0000 to 0000 007F (US-ASCII repertoire)
      correspond to octets 00 to 7F (7 bit US-ASCII values). A direct
      consequence is that a plain ASCII string is also a valid UTF-8
      string.

   -  US-ASCII values do not appear otherwise in a UTF-8 encoded
      character stream.  This provides compatibility with file systems
      or other software (e.g. the printf() function in C libraries) that
      parse based on US-ASCII values but are transparent to other
      values.

   -  Round-trip conversion is easy between UTF-8 and either of UCS-4,
      UCS-2.

Yergeau                     Standards Track                     [Page 2]
RFC 2279                         UTF-8                      January 1998
Show full document text