Character implementation in LispWorks covers the full range of the Unicode standard.
#x110000, which covers exactly the Unicode range. The surrogate code points (codes
#xdfff) are illegal as character codes.
cl:code-char accepts integers from 0 below
cl:char-code-limit. Other values cause an error. For codes in the surrogate range it returns
nil. Reading characters from streams and converting characters from foreign strings can generate characters in all the range (depending on the external-format used), and can never generate character objects corresponding to surrogate code points.
text-string and simple-text-string take 32 bits per character and can store the full range of Unicode characters.
simple-char is now a synonym for
cl:character, and is deprecated.
16-bit characters and 16-bit strings are implemented by types bmp-char and bmp-string and simple-bmp-string (BMP is Basic Multilingual Plane, the first plane (0 - #xffff) of Unicode). You may want to use bmp-string to minimize memory usage if you have an application with many 16-bit strings. That will work provided all the characters you ever use have codes less than
#x10000. If all of the codes are below 256, you can use base-string instead.
Note: Character bits and font attributes are not supported. To deal with bits, use Gesture Spec objects (see make-gesture-spec and coerce-to-gesture-spec).
LispWorks User Guide and Reference Manual - 20 Sep 2017