文字は Unicode のスカラー値を表現するオブジェクトである。
注: Unicode では最新版の標準では(0 ~ #x10FFFF から、 #xD800 ~ #xDFFF までを除いた範囲の整数の)スカラー値の並びと人間の読める「文字」の間に対応関係を定義している。さらに詳しく言うと、 Unicode では字形と文字を区別している。字形は人間が読むために表示されるものであり、文字は字形に写像される抽象的な実体である(時には周囲にある文字の影響を受けることもある)。さらに、異なるスカラー値の並びが同一の文字に対応することがある。スカラー値と文字と字形の関係は微妙で複雑なのである。
このような複雑さを覗けば、読み書きのできる人間のほとんどが「文字」と読んでいるであろうものは単一の Unicode のスカラー値で表現できる(だがこの場合も、複数の Unicode のスカラー値の並びが同一の文字を表すこともある)。こういった分類をされるものには、例えば、ローマ字、キリル文字、ヘブライ文字の子音、そして漢字のほとんどがある。
Unicode では #xD800 から #xDFFF は、その範囲は Unicode のコードポイントの一部であるが、スカラー値の範囲から除外している。ただし、この範囲の Unicode コードポイントはいわゆるサロゲートであり、 UTF-16 エンコーディングの構造物であり、特定の Unicode エンコーディングのなかにだけ現れる可能性があり、そしてその場合にもペアになった場合にだけスカラー値をコード化する。したあって、文字はすべてコードポイントを表現するが、サロゲートコードポイントは文字としての表現を持たない。
obj が文字であれば #t を返し、そうでなければ #f を返す。
sv は Unicode のスカラー値でなければならない。すなわち、非負の正確な整数オブジェクトで [0, #xD7FF] ∪ [#xE000, #x10FFFF] の範囲になければならない。
文字が与えられた場合、 char->integer はその Unicode スカラー値を正確な整数オブジェクトとして返す。 Unicode のスカラー値 sv について、 integer->char はそれに対応する文字を返す。
(integer->char 32) ⇒ #\space (char->integer (integer->char 5000)) ⇒ 5000 (integer->char #\xD800) &assertion exception
これらの手続きは文字集合に対してその Unicode スカラー値にしたがって全順序を定義する。
(char<? #\z #\ß) ⇒ #t (char<? #\z #\Z) ⇒ #f