### 5.2 Unicode

MIT/GNU Scheme implements the full Unicode character repertoire, defining predicates for Unicode characters and their associated integer values. A Unicode code point is an exact non-negative integer strictly less than `#x110000`. A Unicode scalar value is a Unicode code point that doesn’t fall between `#xD800` inclusive and `#xE000` exclusive; in other words, any Unicode code point except for the surrogate code points.

procedure: unicode-code-point? object ¶

  Returns `#t` if object is a Unicode code point, otherwise it returns `#f`.

procedure: unicode-scalar-value? object ¶

  Returns `#t` if object is a Unicode scalar value, otherwise it returns `#f`.

procedure: unicode-char? object ¶

  Returns `#t` if object is any character corresponding to a Unicode code point, except for those with general category `other:surrogate` or `other:not-assigned`.

procedure: char-general-category char ¶
procedure: code-point-general-category code-point ¶

  Returns the Unicode general category of char (or code-point) as a descriptive symbol:

  Category | Symbol
  --- | ---
  Lu | `letter:uppercase`
  Ll | `letter:lowercase`
  Lt | `letter:titlecase`
  Lm | `letter:modifier`
  Lo | `letter:other`
  Mn | `mark:nonspacing`
  Mc | `mark:spacing-combining`
  Me | `mark:enclosing`
  Nd | `number:decimal-digit`
  Nl | `number:letter`
  No | `number:other`
  Pc | `punctuation:connector`
  Pd | `punctuation:dash`
  Ps | `punctuation:open`
  Pe | `punctuation:close`
  Pi | `punctuation:initial-quote`
  Pf | `punctuation:final-quote`
  Po | `punctuation:other`
  Sm | `symbol:math`
  Sc | `symbol:currency`
  Sk | `symbol:modifier`
  So | `symbol:other`
  Zs | `separator:space`
  Zl | `separator:line`
  Zp | `separator:paragraph`
  Cc | `other:control`
  Cf | `other:format`
  Cs | `other:surrogate`
  Co | `other:private-use`
  Cn | `other:not-assigned`