Next: , Previous: Chars and Bytes, Up: Non-ASCII Characters


32.7 文字の分割

本節の関数は、文字とそれを表現するために用いられるバイト値のあいだの 変換を行います。 ほとんどの目的に関しては、Emacsが必要に応じて自動的に行うため、 文字を表現するためのバイト列を扱う必要はありません。

— Function: char-bytes character

この関数は、文字characterを表現するために必要なバイト数を返す。 これは、文字characterが属する文字集合だけに依存し、 その文字集合(see Character Sets)の次元とその導入列の和に等しい。

          (char-bytes 2248)
                2
          (char-bytes 65)
                1
          (char-bytes 192)
                1

マルチバイト表現とユニバイト表現のどちらに対しても この関数で正しい結果を得られるのは、 2つの表現で用いられる非ASCII文字コードに重なりがないからである。

— Function: split-char character

文字characterの文字集合の名前に続けて、 その文字集合でcharacterを識別する1バイトか2バイトの値(整数)から 成るリストを返す。 バイト値の個数はその文字集合の次元である。

          (split-char 2248)
                (latin-iso8859-1 72)
          (split-char 65)
                (ascii 65)

ユニバイトの非ASCII文字は、 文字集合asciiの一部とみなす。

          (split-char 192)
                (ascii 192)
— Function: make-char charset &rest byte-values

この関数は、文字集合charsetにおいて byte-valuesで識別される文字を返す。 これは、split-charのほぼ逆関数にあたる。 通常、文字集合charsetの次元に応じて、 1つか2つのbyte-valuesを指定する。 たとえばつぎのとおり。

          (make-char 'latin-iso8859-1 72)
                2248

byte-valuesを指定せずにmake-charを呼び出すと、 その結果は文字集合charsetを代表する 汎用文字(generic character)である。 汎用文字は整数であるが、文字としてバッファに挿入するには 正しくないものである。 1つの文字集合全体を表すためにchar-table-rangeで使える (see Char-Tables)。 char-valid-pは汎用文字に対してはnilを返す。 たとえばつぎのとおり。

     (make-char 'latin-iso8859-1)
           2176
     (char-valid-p 2176)
           nil
     (split-char 2176)
           (latin-iso8859-1 0)