DIS 10646
DIS 10646とは、ISO/IEC 10646の原案である。
DIS 10646とは、文字セットの切り替えを行わずに世界中の文字を単一の文字集合として扱えることを目指したISOの文字コード規格である現在のISO/IEC 10646の原案(Draft International Standard)であり、この「DIS 10646」には、1990年に作成されたが廃案になったDIS 10646第1版と1992年に作成され正式規格の元になったDIS 10646第2版とが存在するが、この二つの版の内容は大きく異なっている。本記事では1980年代後半に議論されていたDIS 10646第1版のさらに元になったが検討の結果否決され廃案になった2オクテット案「DP 10646」についても記述する。
1983年7月ISO/TC 97はアメリカの提案にもとづき各国の文字を統一して扱える2オクテットコードの作成を決定し、実際の作業を文字コードを担当する「ISO/TC 97/SC 2」が行うことになった。1984年4月京都で開催されたISO/TC 97/SC 2において、それまでに存在したISO/TC 97/SC 2/WG 1とは別の専門のワークグループ (ISO/TC 97/SC 2/WG 2) を設置することと、作成する規格の規格番号をISO 10646とすることが決定された。
1985年にはアメリカが作成したA案とイギリスが作成したB案の二つの案が提出された。A案はISO 2022との互換性を重視したもので、第1オクテット、第2オクテットともにISO 2022の制御領域に相当する部分を使用せず20から7EとA0からFFのみを用いるものであった。これに対しB案は「真の16ビットコード」を目指して第1オクテット、第2オクテットともにフルに使用し16ビットで表現できる空間をすべて使用するというものであった。この両者は共に当時すでに規格として制定されていた日本・中国・韓国の漢字については統合せずにそのまま含むことを想定したものであった。この両案が検討された結果1987年3月ベルリンで開催されたISO/TC 97/SC 2においてA案が選ばれ「DP 10646」となった。日本はこの案において3021から7E7EにJIS X 0208の第一水準漢字と第二水準漢字、B0A1からFEFEに韓国のKS C 5601の文字を、B021からFE7Eに中国のGB 2312の文字をそれぞれ入れることを考えていた。この案は、日本・中国・韓国の当時すでにそれぞれの国の規格として制定され、ISO 2022に基づく国際登録簿に登録されていた文字コード規格の文字を全て含むことは可能ではあったが、中国は当時自国の文字コードGB 2312の拡張を進めており、この案では「現在規格化を目指して作業を進めている漢字を全て入れることが出来ない」などといった理由で反対され、さらに日本も当時作業が開始されていたJIS X 0208の拡張(1990年に「JIS X 0212 補助漢字」として完成することになるもの)によって増える文字を入れることが出来ないといった理由から大幅な見直しを迫られることになった。その結果DIS 10646はマシンアーキティクチャと親和性の高い4オクテット(32ビット)をベースに1オクテットから4オクテットまでのサブセットを持つコードに根本的に作り直されることになった。
1989年1月ISO 10646の4オクテットコード案の試案「DP 10646」が完成した。1990年4月ワシントンのJTC 1/SC 2で4オクテット案のDIS化が決定し、1990年11月に4オクテット案がDIS 10646の第1版として完成した。DIS 10646の第1版は、「ISO 646の拡張であり、必要な全ての文字を一つの体系に収録しようとする」という点では現在のISO 10646と同じであるが、現在のISO 10646よりはるかに既存の(ISO 2022に基づいた)符号系との互換性を重視した改革案であった。全ての文字を4オクテット(32bit)で表現する符号であり、各オクテットをそれぞれ群(group)、面(plane)、区 (row)、点(cell)とする。各面にはISO/IEC 2022の制御文字領域を避けた0x20から0x7Fまでと0xA0から0xFFまでの範囲に文字を割り当てることとし、その結果合計で(95+96)の4乗=1330863361字を収容可能な文字としていた。その範囲にISO/IEC 2022にもとづいて国際登録簿に登録された各国の文字コード (ISO 646をはじめISO/IEC 8859やJIS X 0208、GB 2312、KS C 5601など) を区点の位置もそのままに平行移動してそっくり収容するという、従来のコード系との互換性を最大限に尊重した構成をとっていた。
このDIS 10646第1版では最初の面である第20群第20面を基本多言語面 (BMP; Basic Multilingual Plane) と称しており、この呼称は実態を大きく変えながらもDIS 10646第2版においてやはり最初の面である第0群第0面を基本多言語面 (BMP) と称することに繋がっており、その名称はISO/IEC 10646にもそのまま受け継がれている。このDIS 10646第1版のBMPの
20203021から20207E7Eまでには日本のJIS X 0208の16区1点から94区94点まで
2020B021から2020FE7Eまでには中国のGB 2312の16区以降(漢字部分)
2020B0A1から2020FEFEまでには韓国のKS C 5601(現在のKS X 1001)の16行以降
をそれぞれ配置していた。
※ 中国と韓国の領域が重なっているように思えるので、検証が必要
これに対して1987年頃から、XeroxのJoe BeckerとLee Collinsは世界中の文字を統一して扱える文字コード「Unicode」を開発していた。
1989年9月「Unicode Draft 1」が発表され、続いて1990年4月には「Unicode Draft 2」が発表され、同年12月には「Unicode Final Draft」が発表された。このドラフトでは、その基本ポリシーとして、2オクテット(16bit)で全ての文字を扱えることを目指しており、そのために以下のような方針をとっていた。
符号位置はコントロール領域まで全て使う。
各種アルファベット類は新規に割り当てる。
日本・中国・韓国の漢字の類似する漢字を統合して2万弱の漢字コードを入れ、さらに将来の拡張用に、3万程度の漢字の空き領域を別に用意する。
1989年に開催されたSC 2アンマン会議においてアメリカは検討中であったDP 10646に対してUnicodeの採用(形式的にはUnicodeとのマージと漢字統合)を提案した。このときの提案は採用に至らず1990年11月には4オクテットベースのDIS 10646の第1版が完成した。しかしながらこの時期Unicodeも制定に向けての作業が着々と進められており、DIS 10646の第1版とUnicodeという、ほぼ同じ目的を持ちながら異なった二つの文字コードが制定されることになりつつあった。しかしながらほぼ同じ目的を持った二つの文字コードが制定されることには抵抗が強く、両者の一本化を求める意見が強かった中で、
1つの文字を1オクテット(8bit)で表現する符号系がほぼ全てであった欧米において、1つの文字を表現するのに2オクテット(16bit)使用することまでは仕方がないにしても4オクテット(32bit)も使用するのはまだまだコスト面などでの抵抗が強かったこと。
中国が漢字発祥の国として漢字を各国でばらばらに符号化するのではなく、あくまで統一して扱うことを求めたこと。
などの点から、2オクテット(16bit)で全ての文字を扱えることを目指していたUnicodeが圧倒的に優位となり、
最終的にDIS 10646の第1版は1991年6月にUnicodeとの一本化を求める各国により国際投票の結果否決された。
このようなDIS 10646は作り直されることになった。このときのDIS 10646の作り直しについて、「DIS 10646第1版は廃棄されUnicode(を元にした案)に置き換えられた。」とされることもあるが、DIS 10646第1版は否決されたものの、否決した投票の中には「単純にDIS 10646第1版を廃案にしてUnicodeに置き換えるべき」とする意見ではなく「DIS 10646第1版とUnicodeがマージされれば賛成する」という見解が多かったため、DIS 10646第1版とUnicode(1.0)の両方の特徴を取り入れた新たなDIS 10646を作成する事になった。
中でも漢字部分の文字の選択と配置をどうするかが問題となったが、この点については中国および1991年1月にUnicode Final Draftに賛同する企業によって設立されたUnicodeコンソーシアムの要請により、今後の漢字コードの方針を決めるため、ISO/TC 97/SC 2/WG 2は CJK-JRG (Joint Research Group) と呼ばれるグループ(後のIdeographic Rapporteur Group)を別途設置し、そこで引き続き検討することにした。CJK-JRGは
各国の漢字コードに基づき独自の統合規準を定め、ISO 10646 / Unicode用の統合漢字コード表を作成した。CJK-JRGは第1回が1991年7月22日から24日にかけて東京で、第2回が1991年9月17日から19日にかけて北京で、第3回が1991年11月25日から29日にかけて香港で開催された。
中国は「漢字発祥の国」としてこの会議に自身が作成した「統合漢字表」を提出し、これを元に日本固有の漢字を修正追加するという形で最終的な統合漢字表を作成することを提案したが、日本は各国が持つ規格の漢字表を「部首が異なる漢字は統合しない」などの対等な基準で組み合わせて漢字表を統合することを主張した。この中で生まれてきたのが「各国の元になる規格で別の漢字として扱われている漢字は統合漢字表でも別の漢字として取り扱う」という、「原規格分離規則」である。このような議論の結果1991年末になって各国の漢字コードに基づき独自の統合規準を定めた、ISO 10646 / Unicode用の統合漢字コード表が Unified Repertoire and Ordering (URO)として完成した。この初版の表は若干の誤りを含んでいたため翌1992年に若干の修正が行われたURO第二版が制定された。
1992年5月30日 UROを取り込んだDIS 10646第2版が完成した。DIS 10646第2版ではDIS 10646第1版にあった「群 (group)、面 (plane)、区 (row)、点 (cell) 」という構造は残されたが、群 (group)については00から7Eのみが使用出来るようになり実質31ビットのコードになった。また面 (plane)、区 (row)、点 (cell)については完全に値の制限が無くなって00からFFまでの全てが使用出来るようになった。また最初の面(第1版では第0群第0面、第2版では第20群第20面)を基本多言語面 (BMP) と称する形は残しながらも、BMPにUnicodeをそっくり入れてその他の群・面は未使用という、実質Unicodeと同一の2オクテットの符号となった。
1993年5月1日、DIS 10646第2版を元にした「ISO/IEC 10646-1: 1993 Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and basic Multilingual Plane」が賛成多数で国際規格化された。このISO/IEC 10646は、Unicodeとは文字を割り当てたコードポイントについては完全に一致していたものの、ISO/IEC 10646は基本多言語面以外の面の存在を最初から想定しておりそれらの領域についても「あくまでコードポイントに文字が割り当てられていないために未使用である」という立場をとっていた。この点ISO/IEC 10646はDIS 10646第1版に源流を持つ「群、面、区、点」という構造を受け継いだ31ビットコードであり、あくまで一つの面(BMP)しか持たない16ビットコードであるUnicodeに対していわば「上位互換」の関係にあったため、両者はこの時点で完全に同一のものになったわけではなかった。
1993年6月にはUnicodeの側が制定されたばかりのISO/IEC 10646-1:1993に合わせてUnicode 1.0を若干変更したUnicode 1.1が制定した。この後両者は改訂時期を多少ずらすことはあっても追加する文字については必ず同じコードポイントを割り当てるなど歩調を合わせながら度々改訂されていくことになる。
その後Unicodeは、漢字を含めたさまざまな方面からの文字の追加要求に応えるために1996年7月制定のUnicode 2.0以降は2オクテット(16bit)の固定長コードであることをやめてサロゲートペア(代用対)を導入して基本多言語面以外の面(追加面)の存在を可能にして収容可能な文字を大幅に増やし、21ビット領域に拡張を行い31ビットコードであるISO/IEC 10646に近づいていった。Unicodeは規格自体にサロゲートペアが導入されてからも具体的な実装では2オクテット(16ビットコード)固定長コードとして基本多言語面以外の面(追加面)を使用出来ないものが多かったが、次第に基本多言語面以外の面にも対応するシステムが増えていった。
ISO/IEC 10646の側も当初の版では「00群の224面から255面まで」と「96群から127群まで」については私用領域と定められていたが、2003年になってISO/IEC 10646は「群、面、区、点」という構造を残しながらも第0群第17面以降の面については「将来にわたって文字は割り当てられない」と定められ、文字を割り当てられる可能性のある範囲がUnicodeと同一になった。
さらに2010年時点で検討中のISO/IEC 10646の改正案では、初期のUnicodeの最大の特徴であった2オクテット(16ビット)固定長文字コードとしての「基本多言語面にしか対応していないエンコーディングであるUCS-2」を「deprecated」(deprecation)とする規定を盛り込む一方で、「群、面、区、点」という構造を放棄し「ISO/IEC 10646によって提供されるUCSは第0面から第16面までの17の面から構成される。」と規定し、ISO/IEC 10646の構造自体を完全にUnicodeと一致させる趣旨の規定もいくつか含まれている。