Re: Origin of the U+nnnn notation

From: Philippe Verdy (
Date: Tue Nov 08 2005 - 08:04:58 CST

  • Next message: Hohberger, Clive: "RE: Origin of the U+nnnn notation"

    From: "Dominikus Scherkl" <>
    >> I have been unable to hunt down the historical origin of the
    >> notation U+nnnn (where nnnn are hexadecimal digits) that we
    >> use to refer to characters (and code points).
    >> Presumably "U" stands for "UCS" or for "Unicode", but where
    >> does the plus sign come from?
    > Maybe it was thought of as an offset from the unit (character null)
    > like in ETA+5 minutes (expected time of arrival was passed five minutes
    > ago - an euphemism for beeing 5 minutes late).

    U-nnnn already exists (or I should say, it has existed). It was refering to
    16-bit code units, not really to characters and was a fixed-width notation
    (with 4 hexadecimal digits). The "U" meant "Unicode" (1.0 and before).

    U+[n...n]nnnn was created to avoid the confusion with the past 16-bit only
    Unicode 1.0 standard (which was not fully compatible with ISO/IEC 10646 code
    points). It is a variable-width notation that refers to ISO/IEC 10646 code
    points. The "U" means "UCS" or "Universal Character Set". At that time, the
    UCS code point range was up to 31 bits wide.

    The U-nnnn notation is abandoned now, except for references to Unicode 1.0.
    If one uses it, it will refer to one or more 16-bit code units needed to
    encode each codepoint (possibly with surrogate pairs). It does not
    designates abstract characters or codepoints unambiguously.

    Later, the variable-width U+[n...n]nnnn notation was restricted to allow
    only codepoints in the 17 first planes of the joined ISO/IEC 10646-1 and
    Unicode standards (so the only standard codepoints are between U+0000 and
    U+10FFFF, some of them being permanently assigned to non-characters).

    The references to larger code points with U+[n...n]nnnn is discouraged, as
    they no longer designate valid code points in both standards. Their
    definition and use is then application-specific.

    There are '''no''' negative codepoints in either standards (U-0001 does not
    designate the 32-bit code unit that you could store in a signed wide-char
    datatype, but in past standard it designated the same codepoint as U+0001
    now). Using "+" makes the statement about signs clear: standard code points
    all have positive values.

    So if you want a representation for negative code units, you need another
    notation (for example N-0001 to represent the negative code unit with
    negative value -1): this notation is application-specific.

    This archive was generated by hypermail 2.1.5 : Tue Nov 08 2005 - 08:09:13 CST