Origin and development
Unicode has the explicit aim of transcending the limitations of traditional character encodings, such as those defined by the
ISO 8859 standard, which find wide usage in various countries of the world but remain largely incompatible with each other. Many traditional character encodings share a common problem in that they allow bilingual computer processing (usually using
Latin characters and the local script), but not multilingual computer processing (computer processing of arbitrary scripts mixed with each other).
Unicode, in intent, encodes the underlying characters—
graphemes and grapheme-like units—rather than the variant
glyphs (renderings) for such characters. In the case of
Chinese characters, this sometimes leads to controversies over distinguishing the underlying character from its variant glyphs (see
In text processing, Unicode takes the role of providing a unique code point—a
number, not a glyph—for each character. In other words, Unicode represents a character in an abstract way and leaves the visual rendering (size, shape,
font, or style) to other software, such as a
web browser or
word processor. This simple aim becomes complicated, however, because of concessions made by Unicode's designers in the hope of encouraging a more rapid adoption of Unicode.
The first 256 code points were made identical to the content of
ISO-8859-1 so as to make it trivial to convert existing western text. Many essentially identical characters were encoded multiple times at different code points to preserve distinctions used by legacy encodings and therefore, allow conversion from those encodings to Unicode (and back) without losing any information. For example, the "
fullwidth forms" section of code points encompasses a full Latin alphabet that is separate from the main Latin alphabet section because in Chinese, Japanese, and Korean (
CJK) fonts, these Latin characters are rendered at the same width as CJK
ideographs, rather than at half the width. For other examples, see
duplicate characters in Unicode.
Based on experiences with the
Xerox Character Code Standard (XCCS) since 1980,
 the origins of Unicode date to 1987, when
Joe Becker from
Lee Collins and
Mark Davis from
Apple started investigating the practicalities of creating a universal character set.
 With additional input from Peter Fenwick and Dave Opstad,
 Joe Becker published a draft proposal for an "international/multilingual text character encoding system in August 1988, tentatively called Unicode". He explained that "[t]he name 'Unicode' is intended to suggest a unique, unified, universal encoding".
In this document, entitled Unicode 88, Becker outlined a
16-bit character model:
Unicode is intended to address the need for a workable, reliable world text encoding. Unicode could be roughly described as "wide-body ASCII" that has been stretched to 16 bits to encompass the characters of all the world's living languages. In a properly engineered design, 16 bits per character are more than sufficient for this purpose.
His original 16-bit design was based on the assumption that only those scripts and characters in modern use would need to be encoded:
Unicode gives higher priority to ensuring utility for the future than to preserving past antiquities. Unicode aims in the first instance at the characters published in modern text (e.g. in the union of all newspapers and magazines printed in the world in 1988), whose number is undoubtedly far below 214 = 16,384. Beyond those modern-use characters, all others may be defined to be obsolete or rare; these are better candidates for private-use registration than for congesting the public list of generally useful Unicodes.
In early 1989, the Unicode working group expanded to include Ken Whistler and Mike Kernaghan of Metaphor, Karen Smith-Yoshimura and Joan Aliprand of
RLG, and Glenn Wright of
Sun Microsystems, and in 1990, Michel Suignard and Asmus Freytag from
Microsoft and Rick McGowan of
NeXT joined the group. By the end of 1990, most of the work on mapping existing character encoding standards had been completed, and a final review draft of Unicode was ready.
Unicode Consortium was incorporated in California on January 3, 1991,
 and in October 1991, the first volume of the Unicode standard was published. The second volume, covering Han ideographs, was published in June 1992.
In 1996, a surrogate character mechanism was implemented in Unicode 2.0, so that Unicode was no longer restricted to 16 bits. This increased the Unicode codespace to over a million code points, which allowed for the encoding of many historic scripts (e.g.,
Egyptian Hieroglyphs) and thousands of rarely used or obsolete characters that had not been anticipated as needing encoding. Among the characters not originally intended for Unicode are rarely used Kanji or Chinese characters, many of which are part of personal and place names, making them rarely used, but much more essential than envisioned in the original architecture of Unicode.
The Microsoft TrueType specification version 1.0 from 1992 used the name Apple Unicode instead of Unicode for the Platform ID in the naming table.
Architecture and terminology
Unicode defines a codespace of 1,114,112
code points in the range 0hex to 10FFFFhex.
 Normally a Unicode code point is referred to by writing "U+" followed by its
hexadecimal number. For code points in the
Basic Multilingual Plane (BMP), four digits are used (e.g., U+0058 for the character LATIN CAPITAL LETTER X); for code points outside the BMP, five or six digits are used, as required (e.g., U+E0001 for the character LANGUAGE TAG and U+10FFFD for the character PRIVATE USE CHARACTER-10FFFD).
Code point planes and blocks
The Unicode codespace is divided into seventeen planes, numbered 0 to 16:
All code points in the BMP are accessed as a single code unit in
UTF-16 encoding and can be encoded in one, two or three bytes in
UTF-8. Code points in Planes 1 through 16 (supplementary planes) are accessed as surrogate pairs in UTF-16 and encoded in four bytes in UTF-8.
Within each plane, characters are allocated within named
blocks of related characters. Although blocks are an arbitrary size, they are always a multiple of 16 code points and often a multiple of 128 code points. Characters required for a given script may be spread out over several different blocks.
General Category property
Each code point has a single
General Category property. The major categories are denoted: Letter, Mark, Number, Punctuation, Symbol, Separator and Other. Within these categories, there are subdivisions. The General Category is not useful for every use, since legacy encodings have used multiple characteristics per single code point. E.g., U+000A <control-000A>
Line feed (LF) in ASCII is both a control and a formatting separator; in Unicode the General Category is "Other, Control". Often, other properties must be used to specify the characteristics and behaviour of a code point. The possible General Categories are:
|General Category (Unicode
||Category Major, minor
Ligatures containing uppercase followed by lowercase letters (e.g.,
||Mark, spacing combining
||Number, decimal digit
||All these, and only these, have
Numeric Type = De
||Numerals composed of letters or letterlike symbols (e.g.,
||Closing bracket characters
||Punctuation, initial quote
quotation mark. Does not include the ASCII "neutral" quotation mark. May behave like Ps or Pe depending on usage
||Punctuation, final quote
||Closing quotation mark. May behave like Ps or Pe depending on usage
Mathematical symbols (e.g.,
∊). Does not include parentheses and brackets, which are in categories Ps and Pe. Also does not include
/, which despite frequent use as mathematical operators, are primarily considered to be "punctuation".
||Includes the space, but not
LF, which are Cc
||Only U+2028 LINE SEPARATOR (LSEP)
||Only U+2029 PARAGRAPH SEPARATOR (PSEP)
soft hyphen, control characters to support
bi-directional text, and
language tag characters
||Not (but abstract)
||Other, private use
||Not (but abstract)
||Fixed 137,468 total: 6,400 in
BMP, 131,068 in
||Other, not assigned
Code points in the range U+D800–U+DBFF (1,024 code points) are known as high-surrogate code points, and code points in the range U+DC00–U+DFFF (1,024 code points) are known as low-surrogate code points. A high-surrogate code point (also known as a leading surrogate) followed by a low-surrogate code point (also known as a trailing surrogate) together form a surrogate pair used in
UTF-16 to represent 1,048,576 code points outside BMP. High and low surrogate code points are not valid by themselves. Thus the range of code points that are available for use as characters is U+0000–U+D7FF and U+E000–U+10FFFF (1,112,064 code points). The value of these code points (i.e., excluding surrogates) is sometimes referred to as the character's scalar value.
Certain non-character code points are guaranteed never to be used for encoding characters, although applications may make use of these code points internally if they wish. There are sixty-six noncharacters: U+FDD0–U+FDEF and any code point ending in the value FFFE or FFFF (i.e., U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, … U+10FFFE, U+10FFFF). The set of noncharacters is stable, and no new noncharacters will ever be defined.
Reserved code points are those code points which are available for use as encoded characters, but are not yet defined as characters by Unicode.
Private-use code points are considered to be assigned characters, but they have no interpretation specified by the Unicode standard
 so any interchange of such characters requires an agreement between sender and receiver on their interpretation. There are three private-use areas in the Unicode codespace:
- Private Use Area: U+E000–U+F8FF (6,400 characters)
- Supplementary Private Use Area-A: U+F0000–U+FFFFD (65,534 characters)
- Supplementary Private Use Area-B: U+100000–U+10FFFD (65,534 characters).
Graphic characters are characters defined by Unicode to have a particular semantic, and either have a visible
glyph shape or represent a visible space. As of Unicode 10.0 there are 136,537 graphic characters.
Format characters are characters that do not have a visible appearance, but may have an effect on the appearance or behavior of neighboring characters. For example, U+200C
Zero width non-joiner and U+200D
Zero width joiner may be used to change the default shaping behavior of adjacent characters (e.g., to inhibit ligatures or request ligature formation). There are 153 format characters in Unicode 10.0.
Sixty-five code points (U+0000–U+001F and U+007F–U+009F) are reserved as control codes, and correspond to the C0 and C1 control codes defined in ISO/IEC 6429. Of these U+0009 (Tab), U+000A (Line Feed), and U+000D (Carriage Return) are widely used in Unicode-encoded texts.
Graphic characters, format characters, control code characters, and private use characters are known collectively as assigned characters.
The set of graphic and format characters defined by Unicode does not correspond directly to the repertoire of abstract characters that is representable under Unicode. Unicode encodes characters by associating an abstract character with a particular code point.
 However, not all abstract characters are encoded as a single Unicode character, and some abstract characters may be represented in Unicode by a sequence of two or more characters. For example, a Latin small letter "i" with an
dot above, and an
acute accent, which is required in
Lithuanian, is represented by the character sequence U+012F, U+0307, U+0301. Unicode maintains a list of uniquely named character sequences for abstract characters that are not directly encoded in Unicode.
All graphic, format, and private use characters have a unique and immutable name by which they may be identified. This immutability has been guaranteed since Unicode version 2.0 by the Name Stability policy.
 In cases where the name is seriously defective and misleading, or has a serious typographical error, a formal alias may be defined, and applications are encouraged to use the formal alias in place of the official character name. For example, U+A015 ꀕ YI SYLLABLE WU has the formal alias yi syllable iteration mark, and U+FE18 ︘ PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET (sic) has the formal alias presentation form for vertical right white lenticular bracket.
The Unicode Consortium is a nonprofit organization that coordinates Unicode's development. Full members include most of the main computer software and hardware companies with any interest in text-processing standards, including
Oracle Corporation, and
The Consortium has the ambitious goal of eventually replacing existing character encoding schemes with Unicode and its standard
Unicode Transformation Format (UTF) schemes, as many of the existing schemes are limited in size and scope and are incompatible with
Unicode is developed in conjunction with the
International Organization for Standardization and shares the character repertoire with
ISO/IEC 10646: the Universal Character Set. Unicode and ISO/IEC 10646 function equivalently as character encodings, but The Unicode Standard contains much more information for implementers, covering—in depth—topics such as bitwise encoding,
collation and rendering. The Unicode Standard enumerates a multitude of character properties, including those needed for supporting
bidirectional text. The two standards do use slightly different terminology.
The Consortium first published The Unicode Standard (
0-321-18578-1) in 1991 and continues to develop standards based on that original work. The latest version of the standard, Unicode 10.0, was released in June 2017 and is available from the consortium's website. The last of the major versions (versions x.0) to be published in book form was Unicode 5.0 (
0-321-48091-0), but since Unicode 6.0 the full text of the standard is no longer being published in book form. In 2012, however, it was announced that only the core specification for Unicode version 6.1 would be made available as a 692-page print-on-demand paperback.
 Unlike the previous major version printings of the Standard, the print-on-demand core specification does not include any code charts or standard annexes, but the entire standard, including the core specification, will still remain freely available on the Unicode website.
Thus far, the following major and minor versions of the Unicode standard have been published. Update versions, which do not include any changes to character repertoire, are signified by the third number (e.g., "version 4.0.1") and are omitted in the table below.
ISO/IEC 10646 Edition
0-201-56788-1 (Vol. 1)
||Initial repertoire covers these scripts:
Greek and Coptic,
0-201-60845-6 (Vol. 2)
||The initial set of 20,902
CJK Unified Ideographs is defined.
Hangul syllables added to original set of 2,350 characters.
||ISO/IEC 10646-1:1993 plus Amendments 5, 6 and 7
||Original set of
Hangul syllables removed, and a new set of 11,172 Hangul syllables added at a new location.
Tibetan added back in a new location and with a different character repertoire. Surrogate character mechanism defined, and Plane 15 and Plane 16
Private Use Areas allocated.
||ISO/IEC 10646-1:1993 plus Amendments 5, 6 and 7, as well as two characters from Amendment 18
Euro sign and
Object Replacement Character added.
Unified Canadian Aboriginal Syllabics, and
Yi Syllables added, as well as a set of
Old Italic added, as well as sets of symbols for
Western music and
Byzantine music, and 42,711 additional
CJK Unified Ideographs.
||ISO/IEC 10646-1:2000 plus Amendment 1
Tai Le, and
Ugaritic added, as well as
||ISO/IEC 10646:2003 plus Amendment 1
New Tai Lue,
Syloti Nagri, and
Tifinagh added, and
Coptic was disunified from
Greek numbers and
musical symbols were also added.
||ISO/IEC 10646:2003 plus Amendments 1 and 2, as well as four characters from Amendment 3
||ISO/IEC 10646:2003 plus Amendments 1, 2, 3 and 4
Vai added, as well as sets of symbols for the
Mahjong tiles, and
Domino tiles. There were also important additions for
Burmese, additions of letters and
Scribal abbreviations used in medieval
manuscripts, and the addition of
||ISO/IEC 10646:2003 plus Amendments 1, 2, 3, 4, 5 and 6
Egyptian hieroglyphs (the
Gardiner Set, comprising 1,071 characters),
Old South Arabian,
Tai Tham and
Tai Viet added. 4,149 additional
CJK Unified Ideographs (CJK-C), as well as extended Jamo for
Old Hangul, and characters for
||ISO/IEC 10646:2010 plus the
Indian rupee sign
playing card symbols,
emoji. 222 additional
CJK Unified Ideographs (CJK-D) added.
Sora Sompeng, and
||ISO/IEC 10646:2012 plus the
Turkish lira sign
Turkish lira sign.
||ISO/IEC 10646:2012 plus six characters
||5 bidirectional formatting characters.
||ISO/IEC 10646:2012 plus Amendments 1 and 2, as well as the
Old North Arabian,
Pau Cin Hau,
Warang Citi, and
||ISO/IEC 10646:2014 plus Amendment 1, as well as the
Lari sign, nine CJK unified ideographs, and 41 emoji characters
CJK unified ideographs, a set of lowercase letters for
Cherokee, and five emoji
skin tone modifiers
||ISO/IEC 10646:2014 plus Amendments 1 and 2, as well as Adlam, Newa, Japanese TV symbols, and 74 emoji and symbols
Tangut, and 72
||ISO/IEC 10646:2017 plus 56
emoji characters, 285
hentaigana characters, and 3 Zanabazar Square characters
CJK unified ideographs, and 56
^ The number of characters listed for each version of Unicode is the total number of graphic, format and control characters (i.e., excluding private-use characters, noncharacters and surrogate code points).
Many modern applications can render a substantial subset of the many
scripts in Unicode
, as demonstrated by this screenshot from the
Unicode covers almost all scripts (
writing systems) in current use today.
A total of 139
scripts are included in the latest version of Unicode (covering
syllabaries), although there are still scripts that are not yet encoded, particularly those mainly used in historical, liturgical, and academic contexts. Further additions of characters to the already encoded scripts, as well as symbols, in particular for mathematics and
music (in the form of notes and rhythmic symbols), also occur.
The Unicode Roadmap Committee (
Unicode Roadmap page of the
Unicode Consortium Web site. For some scripts on the Roadmap, such as
Khitan small script, encoding proposals have been made and they are working their way through the approval process. For others scripts, such as
Rongorongo, no proposal has yet been made, and they await agreement on character repertoire and other details from the user communities involved.
Some modern invented scripts which have not yet been included in Unicode (e.g.,
Tengwar) or which do not qualify for inclusion in Unicode due to lack of real-world use (e.g.,
Klingon) are listed in the
ConScript Unicode Registry, along with unofficial but widely used
Private Use Area code assignments.
There is also a
Medieval Unicode Font Initiative focused on special Latin medieval characters. Part of these proposals have been already included into Unicode.
The Script Encoding Initiative, a project run by Deborah Anderson at the
University of California, Berkeley was founded in 2002 with the goal of funding proposals for scripts not yet encoded in the standard. The project has become a major source of proposed additions to the standard in recent years.