広告

「符号化文字集合 coded character set」という語の定義

「符号化文字集合」(coded character set)という語は、大まかに文字コー ド (コード系、コードセット) に対応する用語である。

だが、この用語には大別して2系統の定義がある。ひとつはISO (および JIS) での定義、もうひとつはIETF系統の定義である。

ISO/JIS系統の定義

ISO/JIS系統の規格では、概略「文字の集合を定義し、その集合内の各文字に ビット組合わせを対応付けたもの」という定義がなされている。

例えば、ISO/IEC 8859-1:1998 (いわゆるISOラテン1) では、“coded character set”の定義として以下のように記されている。

coded character set; code: A set of unambiguous rules that establishes a character set and the one-to-one relationship between the characters of the set and their bit combinations.

JISの定義はこの直訳といって良い定義である (1990年代半ばから、JISは ISOと整合するよう改訂されてきた)。

例えば、JIS X 0201-1997には次のようにある。

符号化文字集合 (coded character set)、符号 (code) 文字集合を定め、 かつ、その集合内の文字とビット組合せとを1対1に対応付ける、あいまいでな い規則の集合。

JIS X 0208:1997ならびにJIS X 0213:2000における定義も、これと同一で ある (上の文中の「かつ」の後の読点の有無だけが異なるが、定義に影響する 差異ではない)。

IETF系統の定義

RFCにおいてcoded character setという語が使われた嚆矢はRFC 1866 (Hypertext Markup Language - 2.0、1995年11月) であると思われる。

coded character set

A function whose domain is a subset of the integers and whose range is a character repertoire. That is, for some set of integers (usually of the form {0, 1, 2, ..., N} ), a coded character set and an integer in that set determine a character. Conversely, a character and a coded character set determine the character's code position (or, in rare cases, a few code positions).

ここでの特徴は、文字を「integer」(整数) と対応付けると言っているこ とである。ISOの定義では bit combination (ビット組合せ) であるのと異なっ ている。

このRFCの著者の一人D. ConnollyがRFC 1866公開に先立つ1995年5月に公開 している文書 "Character Set" Considered Harmfulには既にこの定義が見える。

coded character set

A function whose domain is a subset of the integers, and whose range is a set of characters.

Connollyはこの定義を持ち出すにあたって「we introduce the primitive notion of character and use it to define the term coded character set from [ISO10646] and other standards」(強調引用者)とあ るのだが、本当だろうか。実はこの文書のReferenceには、[ISO10646]の記載 は無いのである。したがってConnollyがどの版のISO/IEC 10646を参照したか は (もし参照していたとして) 不明であるが、いずれかの版の10646で上記の ような定義がなされていたとは考えにくい。

これは推測だが、SGMLの用語「Document Character Set」に引きずられる 形で上のような「integer」と文字を対応付ける定義が出てきたのではないだろうか。 SGMLではSGML宣言において、文書で使用する文字コードの定義を「Document Character Set」として宣言するが、その宣言は文字と番号 (ビット組合せで なく) とを対応付けるものとなっている。HTMLはSGMLの適用例という形で定義 されているので、Document Character Setの概念がHTMLにおける文字コードの 定義に影響したことはありそうな話である。(ちなみに、SGMLはISOになっているに もかかわらず、Document Character SetがISO/IEC 2022と整合的でない 「番号」に固執したため、日本語用のSGML宣言では、EUCの2バイトコードを 連結して16ビットの整数とみなすという少々苦しい手法を取らざるを得なかった)

RFCにおける 「coded character set」の定義はこれが以後も踏襲されてい る。

RFC 2978では下記のように定義されている。

A Coded Character Set (CCS) is a one-to-one mapping from a set of abstract characters to a set of integers. Examples of coded character sets are ISO 10646 [ISO-10646], US-ASCII [US-ASCII], and the ISO-8859 series [ISO-8859].

RFC 1866に比べると、対応付けの方向が「整数→文字」から「文字→整数」 に変わっているが、いずれにせよ「文字と整数」の対応付けであることに変わ りはなく、ISOの国際標準と乖離している。ここで ISO/IEC 8859がRFCの定義 でのcoded character setであるかのように言っているが、これが誤りである ことは先に引用したISO/IEC 8859-1における定義から明らかである。

IETF系統の「coded character set」はRFCのみならずUnicodeのTechnical Reportにも影響している。

UTR#17 Character Encoding Modelでは、次のような定義がある。

A coded character set is defined to be a mapping from a set of abstract characters to the set of nonnegative integers.

この定義のもとでcoded character setの例としてJIS X 0208を挙げている が、JISの区点番号は整数ではなく整数の組 (例えば「あ」なら区番号4、点番 号2という2つの整数の組) であるので、上の「非負整数の集合」へのマッピン グという定義には合致しない。

またISO/IEC 8859-1にしても、上述の通りこの規格が定義しているのは文 字とそのbit combinationであるので、integerではない。

評価

ISO (およびJIS) の「符号化文字集合」の定義は一貫しているが、Gバッファ に指示する文字集合 (例えばJIS X 0201のラテン文字集合) も、特定の文字集 合の指示・呼び出しを行う体系(EUC-JIS-2004のような) もどちらも「符号化 文字集合」という同じ用語で表される。これは、さほど実害はないものの、ど ちらの意味で使っているか、ときに曖昧であり得る。また、ISO-2022-JPのよ うに状態を持つ符号化方式をも「符号化文字集合」と呼ぶには、定義の幾分の 拡張が必要ではないかとも思える。

その点でIETF系統の「CSS/CES」という区別は有用であるように思えるが、 いかんせんその用語の定義が現実の文字コード規格と必ずしも対応しないこと が難点である。また、ISOの国際標準で既に使用されている“coded character set”という語を別の意味で定義していることは混乱の元であり、避けるべき であったと考えられる。

こういった事情から、文字コードの定義にかかわる用語は未だ決定版では ないというのが私の考えであり、今後、(ISO系統もIETF系統も) 変更があって も良いのではないかと思える。

補足: ビット組合せと整数の違い

ビット組合せは、ビットの順序付いた列であり、整数ではない。ただし整 数の表現に2進法を用いるとビット組合せと対応付けることはできる。

ビット組合せを整数として解釈するには複数の方法がある。例えば、 10100001 というビット組合せは、161、-94 (1の補数表現)、-95 (2の補数表 現) といった整数として解釈できる。


広告

2006年7月
Yano K.