Unicode とユーザ定義文字・ベンダ定義文字に関する問題点と解決策

1996年10月25日

TOG/JVC CDE/Motif 技術検討 WG

変更履歴

1996年12月13日

 添付資料のコード変換規則のテーブルに一部間違いが見つかりましたので 訂正しました. 訂正したのは以下のテーブルです.

    Microsoft Windows 3.51 式の変換
	JIS X 0208 漢字

    JIS X 0221 式の変換 (ASCII と併用する場合)
	JIS X 0212 補助漢字
1997年6月30日

 添付資料のコード変換規則のテーブルに一部間違いが見つかりましたので 訂正しました. 訂正したのは以下のテーブルです.

    Microsoft Windows 3.51 式の変換
	JIS X 0212 補助漢字

1. 目標

 Unicode および ISO/IEC 10646-1 (以下, UCS と総称する) は1993年に規定さ れた新しいコードセットであり, いくつかの応用分野において徐々に使われだそ うとしている.

 UCS には, 漢字が約2万文字, その他記号類も多数登録されているが, それで も日本や中国, 台湾, 韓国などで使われている (または使われていた) 漢字や記 号類のすべてをカバーしているわけではなく, ユーザ定義文字の利用は必要と考 えられる. また, これまで日本で使われてきたコードセットには, ベンダ定義文 字も多数含まれているが, すべてのベンダのベンダ定義文字が UCS に取り入れ られたわけではないため, UCS と既存のコードセットとのコード変換の際には問 題になるだろう.

 ユーザ定義文字やベンダ定義文字については, UCS でも実装依存になっている ため, なにも取り決めがない場合, 相互運用上の問題になる. ここでは, それを 避けるための解決策を検討する.

2. 問題点

 ここでは, 次に示す各問題について考察する.

2.1 コード変換について

 UCS では, 似たような形をした文字が定義されたコードポイントがいくつもあ り (たとえば, 「〜」に似た文字は, UCS では 0x301C, 0x223C, 0x223D, 0x223E, 0x223F の各コードポイントに定義されている), 既存のコードセットとの間の変換の際 にどのコードポイントに対応付けるかが問題となる.

2.2 6400文字を超えるユーザ定義文字について

 UCS では Private Use Area (PUA) として6400文字のコードポイントがあり, ユーザ定義文字のために利用可能だが, 6400文字を超えたユーザ定義文字が必 要な場合どうすればよいかが問題である.

2.3 ベンダ定義文字のマッピングについて

 既存のコードセットとのコード変換を考えた場合, JIS X 0201, JIS X 0208 および JIS X 0212 の各規格で規定されている文字にはすべて対応するコードポ イントが UCS 内にあるはずだが, ベンダ定義文字についてはそのような保証は なく, UCS 側に対応する文字が存在しないことがある. この場合にどう対処する かが問題となる.

2.4 日中韓のユーザ定義文字の共存について

 UNIX システムではロケールを切り換えることによって一つのシステム上で日 本語・中国語・韓国語など複数の言語を使用できる. ユーザ定義文字を使用する 場合, 日本語ロケールと中国語ロケールとでは違う種類の文字を定義したいこと が考えられるが, UCS を使用する場合これらを共存させるかどうかが問題となる.

3. 解決策

 この章では, 前の章で提起された各問題について, 解決策を検討する.

3.1 コード変換について

3.1.1 問題点の詳細

 ここでは, eucJP-open と UCS との間のコード変換について考える. コード変 換において問題となるのは次の点である.

(1) 類似の文字が複数ある場合, どれに対応付けるか

 UCS には似たような形をした文字がいくつもあり, 既存のコードセットとの 対応付けが一対一にならず, 一対多になる場合がある. たとえば, JIS X 0208 の1区33点の「〜」(波ダッシュ)に似た UCS の文字は,

0x301CWAVE DASH
0x223CTILDE OPERATOR
0x223DREVERSED TILDE
0x223EINVERTED LAZY S
0x223FSIGN WAVE
0xFF5EFULLWIDTH TILDE

の各種がある. JIS X 0221 (ISO 10646 の JIS 版) 附属書3表3では, 名前の一致と形の類似から 0x301C を選んだが, Windows NT 3.51 で採用されているコード変換では 0xFF5E を選んでいる.

 同様の問題は「〜」のほか, 「―」, 「‖」, 「−」で発生している.

 解決としては,

  1. UCS からの変換の場合, 似たような字形をもつ複数の UCS のコードポイント が JIS X 0208 の一つのコードポイントに変換される「多対一」の変換にする. たとえば, 上の「〜」の例では, UCS のコードポイント 0x301C と 0xFF5E の両方が JIS X 0208 の1区33点の「〜」に変換されるようにすればよい.
  2. UCS への変換の場合, 存在する複数のコード変換をサポートするしかない. いま分かっている限りでは, Microsoft 式のコード変換と JIS X 0221 式のコー ド変換の少なくとも2つが必要である.

の2つが考えられる. a. と b. とは両立できるが, UCS からの変換においても b. の方式を選択することも可能である.

(2) 全角・半角問題

 UCS では, 一つの文字には一つのコードポイントを割り当てるのを原則として いるが, 他のコードセットからのコード変換を保証するため, 全角 (FULLWIDTH) および半角 (HALFWIDTH) という名前の付いた文字を制限使用領域 (R-Zone) に 定義している. 「A」や「ア」のように日本語 EUC やシフト JIS に全角・半角 の両方が存在する文字の場合, 対応付けは自明であるが, 「£」や「¢」のよう に日本語 EUC やシフト JIS には全角の方しかないのに, UCS には FULLWIDTH のものとそうでないものとが存在する場合, どちらに対応付けるかが問題となる. JIS X 0208 の実装では「£」は「全角」で表示されることが多く, その点から は FULLWIDTH に対応付けることも考えられるが, 「本来コードセットの規格に は, 文字がどんな幅で表示されるかなどといったことまでは決めていない. HALFWIDTH や FULLWIDTH のような制限使用領域の文字は, どうしても必要な場 合以外は使うべきではない」という考えからは FULLWIDTH でない方に対応付け るべきである.

 この問題によって JIS X 0208 と UCS との変換に問題が出るのは, 「£」や 「¢」, 「¬」がある.

 これも, (1) と同様の解決が採用できる. つまり,

  1. UCS には全角の「£」 とそうでない「£」との2つのコードポイントが存在するので, JIS X 0208 への 変換の際にはどちらのコードポイントも1区82点に対応付けるという方法がとれ るし,
  2. JIS X 0208 から UCS への変換においては, 1区82点を全角の「£」 に変換するものと, そうでない「£」に変換するものの2通りのコード変換を用 意して使い分けることができる.

(3) UCS に存在しない文字

 UCS には, JIS 等の既存の規格に存在した文字はすべて含まれているはずだが, ベンダ定義文字のように規格に存在しなかった文字は含まれているとは限らない. また, 規格でも空きのコードポイントには文字が規定されていないので, 対応する UCS のコードポイントはない.

 このような, UCS に存在しないコードポイントを変換する場合にどうするかは 問題となる.

 これには2通りの対策が考えられる.

  1. 100% 同じ字がない場合, 似たような字を探してそれに対応付ける. たとえ ば, 「No.」という字と完全に同じ文字は UCS には存在しないが, 「No_ ("o_" は, 実際は "o" の下に下線)」が意味・字形が似ているので, それに対応付ける. それでも対応する相手がいない場合, 置換文字に置き換える. この場合, コード 変換によって文字が別の字に化けたり, 置換文字に置き換えられてなくなってし まうことがあるが, ベンダ固有の文字は変換結果には存在しないので, 他ベンダ の処理系との間のデータ交換は確実にできる.
  2. PUA または PUP にベンダ定義文字を割り当て, そこに変換する. この場合, 他ベンダの処理系との互換性は保証されないが, コード変換によって文字が 化けたり, 落ちたりすることはない.

 b. の方式は, ベンダ間で共通の解決案を作るのは難しい. 従来製品との互換 が必要なベンダが個別に対応するのが現実的だろう.

 共通の解決としては, a. の方式で対応表をつくるのがよいだろう.

(4) [¥」問題

 日本ではいわゆる半角英数字のコードセットとして, ISO 646 IRV (ASCII) そ のものではなく, ISO 646 の日本版である JIS X 0201 ラテン文字が使われるこ とが多い. ASCII と JIS X 0201 ラテン文字との違いは, 次の2文字である.

コードポイントISO 646 IRVJIS X 0201 Latin
0x5C
0x7E

 しかし, コードポイントがたまたま同じ所にあるため, 0x5C のコードポイント を見かけ上は円記号「¥」であるが意味上は逆斜線「\」として扱うことが多か った. たとえば, C 言語プログラムで「¥n」を「\n」のつもりで使ったり, MS-DOS や Microsoft Windows でパス名の区切り文字に「\」ではなく「¥」を 使うのがそうである. 0x7E のコードポイントにも同様の問題があるが, この コードポイントは 0x5C ほど重要な用途には使われていなかったこと, および, JIS X 0201 規格上は「上線」であるにもかかわらず「チルダ」のように見える 実装もあることから, この問題はもっぱら「¥問題」(yen sign problem) と呼 ばれることが多い.

 「\」と「¥」との区別は, UCS のように「\」と「¥」との両方のコードポ イントが存在するコードセットとの間のコード変換をする際には次のような問題 が発生する.

 UCS ではさらに「全角の逆斜線」と「全角の円記号」という2つの文字が存在 するため, 前に説明した全角・半角問題とからんで変換ルールが多様化してしま う.

 Windows 3.1/NT/95 では, この問題に対して

という解決を取っている.

 これに対する解決案としては,

  1. 0x5C が円記号の場合のコード変換と, 逆斜線の場合のコード変換の2通りを 用意し, 使い分ける. (これは, 0x21 〜 0x7E の範囲を ASCII とみなすか JIS X 0201 ラテン文字とみなすかの違いであるとみてもよい)
  2. Microsoft と同じ解決をとる. (この解決はグリフの問題を無視すれば, 0x5C が逆斜線で 0x7E がチルダの場合と同じコード変換である)

の2通りが考えられる. 0x7E を「チルダ」とするか「上線」とするかを 0x5C の 問題と別とすれば, a. では最大4通りのコード変換になってしまうが, 実際には すべてが必要になることはないだろう.

3.1.2 コード変換規則

 前節で述べたように, コード変換規則をただ一つに決めるのは問題が多い. そ こで, ここでは次の3通りのコード変換を規定し, 用途によって使い分けること にする.

  1. Windows NT 3.51 で採用されている変換規則. ただし, Windows では SJIS と UCS との間の変換しか規定していないので, 本 WG で規定した eucJP-open と SJIS-open との間のコード変換規則にしたがって変換を行い, eucJP-open と UCS との間の変換規則を定める. eucJP-open には SJIS-open に存在しない文字もあるが, それらはすべて JIS X 0212 補助漢字で規定された ものであり, 補助漢字と UCS との変換規則は JIS X 0221 に規定されている ので, それに従う.

     このコード変換規則は, Windows の動作するコンピュータとの間のデータ交換 に使われることを想定している.

  2. JIS X 0221 に規定された変換のうち, JIS X 0201 と併用する 場合の変換規則.

     この場合, 「¥」や「\」の変換は次の表のようになる.

    eucJP-open UCS
    \ (0x5C) YEN SIGN (0x00A5)
    ~ (0x7E) OVERLINE (0x203E)
    \ (0xA1C0) REVERSE SOLIDUS (0x005C)
    ¥ (0xA1EF) FULLWIDTH YEN SIGN (0xFFE5)
     ̄ (0xA1B1) FULLWIDTH MACRON (0xFFE3)

     このコード変換規則は, 0x5C のコードポイントが「¥」であることを前提と したデータの変換に使われることを想定している.

  3. JIS X 0221 に規定された変換のうち, ASCII と併用する場合の 変換規則.

     この場合, 「¥」や「\」の変換は次の表のようになる.

    eucJP-open UCS
    \ (0x5C) REVERSE SOLIDUS (0x005C)
    ~ (0x7E) TILDE (0x007E)
    \ (0xA1C0) FULLWIDTH REVERSE SOLIDUS (0xFF3C)
    ¥ (0xA1EF) YEN SIGN (0x00A5)
     ̄ (0xA1B1) OVERLINE (0x203E)

     このコード変換規則は, 0x5C のコードポイントが「\」であることを前提と したデータの変換に使われることを想定している.

 具体的なコードポイントの対応については, 添付資料 を参照.

3.1.3 ユーザ定義文字のコード変換規則

 次に, 本 WG で規定した日本語 EUC(eucJP-open)と UCS との間のユーザ定義 文字領域のコード変換仕様を規定する.

 ユーザ定義文字領域として利用可能な eucJP-open の 自由領域は, G1:JIS X 0208 の85区〜94区, G3:JIS X 0212 の78区〜82区, および85区〜94区 からなる. ただし, G3:JIS X 0212 の78区〜82区は, JIS X 0212 の「保留領域」 であり, 将来の JIS X 0212 の拡張に備え, この領域へのユーザ/ベンダ定義 文字の割り当てをできる限り行なわない事を, 本 WG では推奨している.

 ここで規定するユーザ定義文字のコード変換仕様では, eucJP-open のユーザ 定義文字領域を, UCS の PUA に割り付ける事によって, eucJP-open←→UCS 間のコード変換を実現する.

 eucJP-open と UCS との間のユーザ定義文字領域のコード変換は, 次のような 変換規則に従うものとする.

UCSeucJP-open
0xE000〜0xE3AB
0xE3AC〜0xE757
G1 85区〜94区
G3 85区〜94区

eucJP-open←→UCS の UDC 変換

       IBM  : IBM拡張文字 (eucJP-open G3 83区〜84区)

3.2 6400文字を超えるユーザ定義文字について

 UCS のユーザ定義文字領域として BMP (Basic Multilingual Plane) の PUA を使用できるが, この領域は6400文字に制限されている. 6400個を超える ユーザ定義文字を使用する手段として, 次の方法を検討した.

3.2.1 UCS の保留領域を使用

 UCS には未定義の保留領域がいくつかあり, これらにユーザ定義文字を 割り当てたとすれば, 6400文字を超えるユーザ定義文字を使用できることになる. しかし, 保留領域は将来の標準化や拡張に使用される可能性があり, 他の目的で 使用してはならないとされている. 現に, これまで UCS の 0xA000 〜 0xDFFF は 保留領域とされていたが, Unicode Version 2.0で 0xAC00 〜 0xD7A3がハングルの 領域と定義し直された.

 このように, 保留領域は特別な用途や将来の拡張に使われる可能性が高いため 問題が多く, ユーザ定義文字として使用するべきではない. よって, この方法は 採用しないこととする.

3.2.2 UTF-16 を利用

 UTF-16 は, BMP に加えて16面 (planes) 分の文字を扱えるように UCS-2 を 拡張したものである. 面 0x00 つまり BMP の領域の文字は, そのまま2バイトで 表現される. 面 0x01〜0x10 の文字は, high-half zone codes を 0xD800〜0xDBFF, low-half zone codes を 0xDC00〜0xDFFF とした4バイトで 表現される. そのうち, 面 0x0F と 0x10 を私用領域として使うことができる. つまり, UTF-16 を利用することにより, 2×65536=131072 個のユーザ定義文字を 使用することが可能となる. UTF-16 の仕様と標準化の動向については, 次の URL を参照.

http://www.dkuug.dk/JTC1/SC2/WG2/

 UCS-2 では, 全ての文字を2バイト固定長で扱えるという利点があった. しかし, UTF-16 を使用すると, 面 0x00 つまり BMP の文字は 2バイトで, 面 0x01 〜 0x10 の文字は 4バイトで表現され, 1文字が2バイト固定長でな くなるため, 文字処理が複雑になる可能性がある.

 UNIX では, UTF-8 や UCS-4 をファイルもしくは内部処理のコードとして 使用する可能性が高く, UCS-2 は他の処理系との互換性を取る際に使われる のが一般的である. したがって, UCS-2 の拡張としての UTF-16 を使用する よりもむしろ, UNIX の方式に合った次節の方法を採るべきである.

3.2.3 Private Use Plane (PUP) を利用

 ISO/IEC 10646-1 の仕様および UTF-16 の拡張仕様では, 次の群(group) および面(plane)を私用領域とすることが定められている. これらの領域を利用すれ ば, 膨大な数のユーザ定義文字を扱うことができる.

 UNIX では, 処理コードつまり固定長のワイド文字のサイズとして, 32ビットを 使用できるシステムが一般的である. そこで, UNIX で UCS を扱う際のワイド 文字列の形式を UCS-4 とし, 上記の Private Use Plane (PUP) をユーザ定義 文字領域として利用することを推奨する. その際, コードの小さい領域つまり 群 0x00 の面 0x0F と 0x10 から使用することを推奨する.

 UNIX で UCS を扱う場合, ファイルコードつまりマルチバイト文字の形式として UTF-8 を使用することを推奨する. また, 処理コードつまりワイド文字の形式とし て UCS-4 を使用することを推奨する. PUP をユーザ定義文字として利用するにあ たり, UCS-4 を UTF-8 に変換したコードをマルチバイト形式として使用すること になる.

3.3 ベンダ定義文字のマッピングについて

 ベンダが独自に割り当てたベンダ定義文字を, UCS のいずれかのポイントに マッピングするには, 次の方法が考えられる.

3.3.1 UCS の PUA の最大値から最小値に向かって逆順に割り当てる

  1. ベンダによっては PUA の最大値である6400文字を優に越えるベンタ定義文 字を使用しているところがある.
  2. ベンダ毎に PUA を分割使用するとすれば, 各ベンダの割り当てを, 順番・領域等について協議しなくてはならず, その領域の限界性から 実現が困難である.
  3. ユーザ定義文字を PUA にマッピングする場合, PUA 内で ユーザ定義文字, ベンダ定義文字を共存させることになるが, PUA 内でこの両方を賄うだけ の十分な領域が確保されているとは思えない.

 この割り当て方法は, 上記の理由から不適切と思われる.

3.3.2 UTF-16 を利用して BMP 以外の PUP に割り当てる

 この方法では, 131072個のベンダ定義文字を使用することが可能になるが, 3.3.1 の 2. と同様に, 各ベンダの割り当てを順番・領域等について協議しなくては ならず, 実現が困難である.

3.3.3 BMP の空き領域に割り当てる

 BMP の空き領域には代表的に以下のものがある.

(A)
0x1200 〜 0x1DFF( 3072文字分)
(B)
0x2800 〜 0x2FFF( 2048文字分)
(C)
0xA000 〜 0xDFFF(16384文字分)
  1. (A)に関しては, A-zone の「アルファベット」の領域になっており, この領域をベンダ定義文字に使用することは, 「異種の文字の侵入」 を認めることとなり, 好ましくない.
  2. (B)に関しては, A-zone の「記号と句読点」の領域になっており, この領域を使用することは, 「異種の文字の侵入」を認めることとなり, 好ましくない.
  3. (C)に関しては, 将来のための保留領域であり, また, UTF-16 用に割り当て られている部分も あるので割り当てるポイントにするべきではない.

 この割り当ては, 以上の理由から不適切と思われる.

 結論として, 以上のようにベンダ定義文字のマッピングに関しては, そのマッピング先 を決定することが困難なため規定しないこととする.

3.4 日中韓のユーザ定義文字の共存について

 日本, 韓国, 中国, 台湾の各国では, UCS を除き, それぞれ独自のコード セットが使われており, ユーザ定義文字領域もそれぞれ独自に定義されている. 各国の既存のコードセットと, UCS のマルチリンガル環境との間で, ユーザ定義 文字データの相互運用性を保つためには, UCS のユーザ定義文字領域を各国ごと に分割して個別に定義し共存をはかることが考えられる.

 まず考えられる方法は, PUA を各国ごとに分割することである. しかし, PUA は 6400 文字に限られるし, 他国の標準との関連や, 他のプラットフォ ームとの互換性の点から, 以下の問題点がある.

(1)
各国のユーザ定義文字の文字数が限られる
(2)
各国のユーザ定義文字領域が標準で定められている必要がある
(3)
別の言語の追加が困難
(4)
他国の同意が必要
(5)
他のプラットフォームとの互換性を保つことが困難

 文字数の制限 (1) については, 3.2.3 の方法を使用することで解決できる 可能性がある. しかし, この方法でも依然として他の問題が残る. また, 他 の問題については, 他国や他の多くのベンダと協議をする必要があるため, 実現はかなり困難であると思われる.

 したがって, 本 WG では日本における推奨のみを定めることとし, 各国 のユーザ定義文字の共存は考えないものとする.

4. 補足

4.1 Windows NT 拡張漢字処理仕様書についての検討

 Windows NT 漢字処理技術協議会は, Windows NT 上の Unicode での 漢字処理の拡張仕様として, Windows NT 拡張漢字処理仕様書 (XKP) の 第 2.0 版を公開した. この仕様書では以下の拡張が規定されている.

 これらの拡張を利用するために, ユーザ定義文字を管理するユーザ定義文字 サーバが開発され, ユーザ定義文字サーバにアクセスするための API が規定された.

 本 WG でこの XKP 2.0 の仕様を検討した結果, 以下の問題点があげられた.

以上の問題点から, 本 WG ではこの仕様について考慮しないこととする.

4.2 eucJP-open と UCS との間のコード変換規則の検討経緯

 eucJP-open と UCS との間のユーザ定義文字領域のコード変換規則として, 次の3案が示された.

(1)案

UCSeucJP-open
0xE000〜0xE3AB
0xE3AC〜0xE757
0xE758〜0xE92D
G1 85区〜94区
G3 85区〜94区
G3 78区〜82区

eucJP-open←→UCS の UDC 変換案(1)

       IBM  : IBM拡張文字 (eucJP-open G3 83区〜84区)

(2)案

UCSeucJP-open
0xE000〜0xE3AB
0xE3AC〜0xE757
0xE83C〜0xF8FF
G1 85区〜94区
G3 85区〜94区
G3 78区〜82区

eucJP-open←→UCS の UDC 変換案(2)

       IBM  : IBM拡張文字 (eucJP-open G3 83区〜84区)

(3)案

UCSeucJP-open
0xE000〜0xE3AB
0xE3AC〜0xE757
G1 85区〜94区
G3 85区〜94区

eucJP-open←→UCS の UDC 変換案(3)

       IBM  : IBM拡張文字 (eucJP-open G3 83区〜84区)

(1)案の割り当て理由は, 次の通り.

 マイクロソフト標準キャラクタセット仕様書で定義されている SJIS←→ Unicode の外字マッピングテーブルでは, SJIS のコードポイント 0xF040 〜 0xF9FC (95区 〜 114区) を Unicode の PUA 0xE000 〜 0xE757 に割り付けて いる. このマッピングで Unicode←→SJIS←→eucJP-open の相互変換において, ユーザ定義文字領域(UDC(A)およびUDC(B))の変換に, 一貫性を持たせることが できる.

 (1)案では, eucJP-open の G3 78区 〜 82区の空き領域をユーザ定義文字とみなし, また, マッピングを簡単にするため, eucJP-open の G3 78区〜82区は, PUA の 0xE758〜0xE92D に, コードの小さいものから順に, 隙間なく詰めて割り当 てることとする.

(2)案の割り当て理由は, 次の通り.

 UDC(A) および UDC(B) の変換は (1)案と同じである.

現在, マイクロソフト標準キャラクタセット仕様書では, Unicode←→SJIS 間 のユーザ外字のマッピングテーブルでは, SJIS の 0xF040〜0xF9FC の間の 1880 文字に対してのみ, 変換が定義されており, PUA の 0xE758 以降につい ては, どのような用途で使用するか, 決められていない.

 (2)案では, eucJP-open の G3 78区 〜 82区の空き領域をベンダ定義文字とみなし, 今後, マイクロソフトにより, 0xE758 以降の 4520 文字分の空き領域の使用 に関して, 規約が拡張された場合を考慮し, eucJP-open の G3 78区 〜 82区 を, PUA の終端から逆順にマッピングする.

(3)案の割り当て理由は, 次の通り.

 UDC(A) および UDC(B) の変換は (1)案と同じである.

 eucJP-open の G3:JIS X 0212 78区〜82区(共通自由領域)は, 次に挙げる 理由から, 本仕様では変換規則を定めない.

 同領域のコード変換については, 今後, マイクロソフト, JIS などで, UCS←→JIS X 0212 の変換規則が拡張(規定)された場合, その規則に従う.

 これらの案を検討し, 各社の意見を集めたところ, 多数派となった (3)案を 採用することとした.

5. 用語

 この文書では, 次の用語を使用する.

UCS (Universal Multiple-Octet Coded Character Set)

 ISO/IEC 10646-1:1993 (ISO 10646 と略記する場合が多い) および The Unicode Standard で規定されたコードセットを総称して UCS と呼ぶ. ISO 10646 には各種の実装水準 (implementation level) が規定されているし, 16ビットコードセットである UCS-2 と32ビットコードセットである UCS-4 との 2種類のコードセットが規定されている. また, ISO 10646 と Unicode には, コード表としては同じものを採用しているが, 規定内容には細かい違いがある. UCS という名前はこれらを総称した名前であり, そのような違いを無視してよい 場合に使用する. Unicode や UCS-4 などに個別の特徴について論じる場合は, そのように明示する.

 なお, JIS X 0221 は ISO 10646 の翻訳規格であり, 附属書1〜3を追加規定 した以外は技術的に同一である. 追加された附属書は次の通り.

  1. 日本文字サブレパートリ
  2. 日本語データ情報交換用としての私用文字の使用
  3. JIS X 0201, JIS X 0208 及び JIS X 0212 表内文字との対応

群 (Group), 面 (Plane), 区 (Row), 点 (Cell)

 ISO/IEC 10646-1 では基本的には32ビットのコードセットを規定しており, そ れを上位ビットから8ビットごとにそれぞれ群・面・区・点と呼んでいる.

群 (Group)面 (Plane)区 (Row)点 (Cell)

ただし, 実際には16ビットのコード表である面の単位で扱われることが多く, 区や点のレベルが意味をもつことは少ない.

BMP (Basic Multilingual Plane)

 群 0x00 の面 0x00 を Basic Multilingual Plane (基本多言語面) と呼ぶ. 1996年現在, ISO/IEC 10646-1 において文字が定義されているのはこの BMP だ けである.

UTF (UCS Transformation Format)

 UCS-2 または UCS-4 が直接使用できない環境において, UCS の文字セットを 処理・伝達したい場合に使用する変換形式.

 UTF には, 8ビットの ASCII 互換の環境で使用するための UTF-8, 各バイトの 8ビット目が透過であることを保証できないインターネットの電子メールで使用 するための UTF-7, UCS-2 の16ビットコードの環境で 65586 個を超える文字を 使用するための UTF-16 などがある.

UTF-8

 UTF-8 は ASCII と上位互換を保ちながら UCS の文字を利用できるようにした 変換形式である. UTF-8 では, 0x0000〜0x007F の範囲が1バイト, 0x0080〜 0x03FF の範囲が2バイト, 0x0400〜0xFFFF の範囲が3バイト……となっており, UCS-2 の範囲ならば最大3バイト, UCS-4 の範囲ならば最大6バイトまでで表現 できる可変長コードである. 各文字は, 最初の1バイトを見ればその文字が何バイト の文字かわかるようになっている.

UTF-16

 UTF-16 は, UCS-2 を使いつつ群 0x00 の面 0x01〜0x10 の範囲の文字も使える ようにした変換形式である. UCS-2 では普通は1文字が16ビットであるが, UTF-16 では特定の範囲のコードポイントを BMP 以外$NLL$r;H$&$?$a$KM=Ls$7, 16ビットのコードポイント2つで面 0x01〜0x10 の範囲の文字1個を表現している.

PUA (Private Use Area)

 UCS では, ユーザ定義文字やベンダ定義文字のような用途に使ってもよい領 域として PUA (私用領域) を規定している. これは BMP の 0xE000〜0xF8FF の 6400文字の領域である.

PUP (Private Use Plane)

 UCS では, 面全体が私用に使ってよい私用面 (Private Use Plane) が規定さ れている. 群 0x00 の面 0x0F, 0x10 および 0xE0 〜 0xFF, ならびに群 0x60 〜 0x7F のすべての面が私用面である.

ユーザ定義文字, UDC (User Defined Character)

 標準で規定されたコードセットの中の空きコードポイントに, ユーザが独自に 追加定義した非標準の文字. コードセットによって利用できる空きコードポイン トの数が違うため, ユーザ定義文字の数やコードポイントの範囲はコードセット に依存する.

ベンダ定義文字, VDC (Vendor Defined Character)

 標準で規定されたコードセットの中の空きコードポイントに, ベンダが独自に 追加定義した非標準の文字. コードセットによって利用できる空きコードポイン トの数が違うため, ベンダ定義文字の数やコードポイントの範囲はコードセット に依存する.

コードセット (code set)

 ある文字セットの個々の文字に対して, ユニークなコードの値(コードポイン ト)を割り当てたもの. なお, エンコーディング方式もコードセットの一種とし て扱う. また, コード変換は code set conversion と訳す.

文字セット (character set)

 あるコードセットで定義される文字の集合. 文字セットについて議論する場合, それぞれの文字にどのようなコードの値(コードポイント)が割り当てられるか については無視することが多い.

エンコーディング方式 (encoding method)

 複数のコードセットを組み合わせて一つのコードセットを構成する場合の, コー ドポイントを割り当てる規則のこと. 日本語 EUC 及び シフト JIS は, どちら も JIS X 0201 ラテン文字, JIS X 0201 片仮名及び JIS X 0208 漢字という3 つのコードセットを組み合わせて使用する際のエンコーディング方式だと言える. (ただし, 日本語 EUC の場合, 4 つ目のコードセットも利用可能)

コードポイント (code point)

 あるコードセットの中で個々の文字に対して割り当てられたコードの値のこと を, その文字のコードポイントと呼ぶ. たとえば, 「あ」のコードポイントは, シフト JIS では 0x82A0, 日本語EUCでは 0xA4A2 である.

添付資料

コード変換規則

以上