For each code unit sequence X in S that either
encodes a single character,
is a shift sequence, or
is a sequence of ill-formed code units,
processing is in order as follows:
CE is a Unicode encoding and
C corresponds to either
a UCS scalar value whose Unicode property General_Category
has a value in the groups Separator (Z) or Other (C) or to
a UCS scalar value which has the Unicode property Grapheme_Extend=Yes,
as described by table 12 of UAX #44, or
CE is not a Unicode encoding and
C is one of an implementation-defined set
of separator or non-printable characters
then the sequence \u{hex-digit-sequence}
is appended to E,
where hex-digit-sequence
is the shortest hexadecimal representation
of C using lower-case hexadecimal digits.
Otherwise (X is a sequence of ill-formed code units),
each code unit U is appended to E in order
as the sequence \x{hex-digit-sequence},
where hex-digit-sequence
is the shortest hexadecimal representation of U
using lower-case hexadecimal digits.