図形文字の一意な符号化

図形文字の一意な符号化

[22] ある文字コードで同じ文字を複数の方法で表現できることを、 重複符号化といいます。

単一文字集合内の重複符号化

[23] Big5 では2つの漢字が誤って2組ずつ収録されています。 Big5 との互換性のためCJK互換漢字にも重複収録されています。

[24] KS X 1001 では漢字韓国語の読みごとに区別されて収録されています。 KS X 1001 との互換性のためCJK互換漢字にも重複収録されています。

[25] シフトJISNEC由来の拡張とIBM由来の拡張でいくつかの文字が重複収録されています。

[27] KPS 9566将軍様の名前を表すチョソングルを通常用のチョソングルと別個に収録しています。

[26] 歴史的に同源で見た目が同じでも、異なる用字系に属するとされて別個に収録されていることはよくあります。

ISO/IEC 2022 における一意符号化規定

[19] ISO/IEC 2022 は、同じ図形文字を複数の方法で表現することを禁止できるとしていました。

[1]

7.5 図形文字の一意な符号化 同じ文字8ビット又は7ビット符号符号要素G0, G1, G2 及び G3 として、 指示される複数の図形文字集合に現れることがある。 このような文字は、二つの集合を定義する仕様又は ISO 符号化文字集合国際登録簿で同じ名前をもつ場合、 同じ文字とみなされる。

同一の文字が複数の集合に割り当てられている場合、 その文字は、その文字が割り当てられた任意の符号要素G0, G1, G2 又は G3 から取り出された符号化表現表現されてよい。

この規格を適用する場合、情報交換の際にすべての文字一意符号化表現をもつことを要求されるとき、 符号の規定 (10.1 参照) で、その制限を明らかにしなければならない。

符号の一意化の制限を適用した場合、 その文字が割り当てられた最下位番号の符号要素 (G0, G1, G2 及び G3 の順) から符号化表現表現される。 この場合、たとえ高位番号の符号要素が既に呼び出されていて、かつ、 その文字が割り当てられている下位番号の符号要素が呼び出されていないときでも、 高位番号の符号要素文字符号化表現は、 使用しない。 JIS X 0202:1998 (ISO/IEC 2022:1994) 7.5

[2] 例えば、 ISO/IEC 646 IRVJIS X 0208:1997 は共に LATIN CAPITAL LETTER A を定義しています。この2つを符号要素として使う場合、 >>1 によれば、 どちらの符号要素で定義されている符号位置によっても LATIN CAPITAL LETTER A表現できます。

しかし、一意符号化が求められる場合は、例えば EUC-JP のように G0IRV, G1JIS X 0208指示するなら、 LATIN CAPITAL LETTER A は常に G 番号の小さい IRV の方で表現しなければなりません。

但し、 ISO-2022-JP のように IRVJIS X 0208G0指示する場合は、 どちらも G 番号は等しいので、一意符号化制限を適用する場合であっても 2種類の符号化表現が認められます。

[3] ところで、 同じ文字文字名前によって判断するとされています。 ISO/IECJIS の最近の符号化文字集合の規格では文字名前ISO/IEC 10646 式の統一された命名法に従っていますが、 古い規格はそうではありません。 ISOREG や原規格の名前を常に適用してしまってよいのでしょうか。 (あるいは JIS X 0202:1998 5.3 文字の名前の規定が適用されるのでしょうか。)

[13] ISO/IEC 2022 のこの規定は第4版 (1994年) で追加されました。 JIS X 0202:1998 C.4

[5] JIS X 0208:1997 7. 符号化文字集合には次の規定があります (JIS X 0213:2000 7. 符号化文字集合にもほぼ同様の規定があります)。

7.2 ISO/IEC 646国際基準版 (IRV) と同時に用いる場合の符号 6.5.1 で規定する漢字集合ISO/IEC 646国際基準版とを同時に用いる場合、 ISO/IEC 646 で規定される図形文字と同じ図形文字は用いてはならない。 ただし、これまでの慣用的な利用との互換を目的としてだけ、 附属書5表2に規定する文字ISO/IEC 646 で規定される文字とは異なった図形文字として用いてもよい。

7.3 JIS X 0201ラテン文字と同時に用いる場合の符号 6.5.1 で規定する漢字集合JIS X 0201ラテン文字用図形文字集合とを同時に用いる場合、 JIS X 0201 で規定される図形文字と同じ図形文字は用いてはならない。 ただし、これまでの慣用的な利用との互換を目的としてだけ、 附属書5表2に規定する文字JIS X 0201 で規定される文字とは異なった図形文字として用いてもよい。

この規定は >>1 に基づくものですが、 JIS X 0208 のこの部分で規定されている符号化文字集合はあくまで JIS X 0202 とは独立に定義されています (JIS X 0202 を実装した環境で用いることもできますが、そうである必要はありません)

[4] JIS X 0208:1997 9.2 指示JIS X 0213:2000 9.2 指示 には次のような規定もあります。

JIS X 0201 又は ISO/IEC 646漢字集合を同時に指示する場合、 これまでの慣用的な利用との互換を目的としてだけ、附属書5表2 に規定する文字JIS X 0201 又は ISO/IEC 646 で規定される文字とは異なった図形文字として用いてもよい。

参考 JIS X 0202 では、同じ図形文字が複数の符号化文字集合中に現れ G0G3指示されているとき、 G 番号の小さいほうが優先され、 G 番号の大きいほうに現れる同じ図形文字は使用禁止とされる。

(挿入部は JIS X 0213:2000 にだけあって、 JIS X 0208:1997 には無い部分。)

[6] JIS X 0208:1997 附属書1 (規定) シフト符号化表現JIS X 0213:2000 附属書1 (参考) Shift_JISX0213 符号化表現 には、次の規定があります。

4.5 代替名称を用いるビット組合せ 附属書1表1及び附属書1表2 に示すビット組合せは、原則として使用しない。ただし、 これまでの慣用的な利用との互換を目的としてだけ、 これらのビット組合せを使用してもよい。この場合には、文字名称は、 それぞれ附属書5表1及び附属書5表2の代替名称を用いなければならない。

参考 これらは、本体及び JIS X 0201 の両方で定義されている文字である。

シフト符号化表現Shift_JISX0213 符号化表現や Shift_JISX0213-plane1 符号化表現や Shift_JIS-2004 符号化表現や Shift_JIS-2004-plane1 符号化表現は ISO/IEC 2022 に基づく符号化文字集合ではありませんが、 考え方としては >>1 に拠っているようです。

JIS X 0213:2000 附属書3 (規定) EUC-JISX0213 符号化表現には、 次の規定があります。

備考 (前略) 漢字集合1面の図形文字のうち、 国際基準版図形文字と同じ図形文字は用いてはならない。 ただし、これまでの慣用的な利用との互換を目的としてだけ、 附属書5表2に規定する文字国際基準版で規定される文字とは異なった図形文字として用いてもよい。

この規定は >>1 に基づくものですが、 ここで規定されている符号化文字集合はあくまで JIS X 0202 とは独立に定義されています (JIS X 0202 を実装した環境で用いることもできますが、そうである必要はありません)

ちなみに、JIS X 0208:1997 附属書2 (規定) RFC 1468 符号化表現 (ISO-2022-JP もどき) や JIS X 0213:2000 附属書2 (参考) ISO-2022-JP-3 符号化表現 には相当する規定がありません (>>2 と同じ理由)。

代替名称という逃げ道

[7] JIS X 0202>>1 の通り一意符号化ないものも認めていますが、 JIS X 0208>>4 のように厳しく受け止めているらしく、 >>5>>6 のように同じ名前を持つ文字が 1つの符号化文字集合に複数存在することを避けています。

しかし実際には半角全角と称した重複符号化が行われています。 そのためこれまでの慣用的な利用との互換を目的としてだけなどと訳の分からない条件の下で代替名称を与え、 ISO/IEC 646 IRVLATIN CAPITAL LETTER AJIS X 0208:1997 の FULLWIDTH LATIN CAPITAL LETTER A名前が違うから違う文字だ。違う文字なのだから1つの符号化文字集合で同時に使用してもよい。 という理屈をつけて現状と摺り合わせています。

[14] 余談になりますが、構成する文字が1文字でも異なるのであれば、それは異なる文字集合である と言われます。であれば、 JIS X 0208:1997 本体は本来の文字集合IRV と併用するための文字集合JIS X 0201 と併用するための文字集合で3つの異なる文字集合を規定していることになります。 異なる文字集合ISO/IEC 2022 環境下で使うためには指示のための終端バイトも普通異なるものだと考えたいところですが、 なぜか ISOREGJIS X 0208:1997 9.1 によれば 1種類の終端バイトしか用意されていません。

[8] FULLWIDTH OVERLINE: JIS X 0208:1997 の1区17点の文字OVERLINE ですが、 附属書5 によれば代替名称FULLWIDTH OVERLINE です。誰が見ても至極尤も自然なことです。

ところが、同じ命名法で文字名前をつけている ISO/IEC 10646 には FULLWIDTH OVERLINE は存在せず、似たようなもので FULLWIDTH MACRON があります。

それでは・・・という話は FULLWIDTH MACRON の項をご覧下さい。

ちなみに、 JIS X 0213:2000 附属書5 によれば 1面1区17点の代替名称FULLWIDTH MACRON です。

[9] JIS X 0208IRV を併用する場合: >>5 には IRV と併用する場合附属書5に従うとありますが、 JIS X 0208:1997 附属書5 には REVERSE SOLIDUS代替名称が欠けていますから、 この1文字に関してだけ これまでの慣用的な利用との互換を目的とした利用に問題が出ます。 (なお、附属書5 には TILDE もありませんが、 JIS X 0208:1997 には TILDE は存在しないので問題はありません。)

JIS X 0213:2000 附属書5 にはこの問題はありません。

[15] IRVとJIS X 0201で異なる2組4文字:

問題は2つあります:

  • JIS X 0208IRVを併用する場合に代替名称がない2文字をどうするのか (>>9)
  • 附属書5表2を適用する場合、全文字に対して適用しなければならないのか、 重複する文字についてのみなのか、任意の文字について適用してよいのか (>>16)

[16] 附属書5表2を適用する場合、その表に含まれるすべての文字/符号位置について代替名称を用いなければならないのか、 重複符号化となるものについてのみ用いなければならないのか、 任意のものについてのみ用いてよいのかが明記されていません。 文脈を汲むなら重複符号化となるものについてのみとするべきなのかもしれませんが・・・・・・。

例えば、IRVJIS X 0213と附属書5表2のすべてを用いると、 符号化文字集合からYEN SIGNOVERLINEが存在しなくなります。

[17] ISO/IEC 646とはなにか: >>5 (IRVを用いたJIS独自の符号化文字集合) の規定ではIRVと明記されていますが、 >>4 (ISO/IEC 2022を用いた符号拡張) の規定では単にISO/IEC 646としかありません。 ISO/IEC 646にはISO/IEC 646規格票内で規定されたIRVと、 各国等の規格で規定されるISO/IEC 646の版があり、 >>4 がいずれを指しているのかは明確ではありません。

JIS X 0201 (ISO/IEC 646の版の1つ) と併記されていることからIRVを指しているとも考えられますが、 >>5 ではIRVと明記されているのに >>4 では明記されていないのも気になります。

[18] 仮にIRVのみを指すとした場合、 厳密に解釈すればASCII (ISO/IEC 646の版の1つで、 ISO/IEC 646:1991 IRVと同じ符号化文字集合のように見えます。) と併用する際に代替名称が使用できるとする根拠も弱くなります。

[10] JIS X 0221 による UCS と JIS の対応付け: JIS X 0221‐1:2001 附属書 2 (参考) 他の JIS の符号化文字集合との対応には、 JIS X 0201, JIS X 0208, JIS X 0212, JIS X 0213UCS の対応関係が説明されています。

要点をまとめると、次の通りです。

[11] どの道同じ内容であるにはせよ、 JIS X 0213 と併用する場合は JIS X 0213 附属書5を参照するように指示した方が良いのでは、 と思ったりもします。

[12] この附属書に従うのであれば、 JIS X 0212TILDE代替名称として FULLWIDTH TILDE を使うことはできません

現実

[20] この規定はほとんど理論上の整合性のためのようなもので、現実には無視されていました。 JIS が「慣用的な利用」と呼ぶ、94図形文字集合なら半角942図形文字集合なら全角として異なる文字として扱う実装がほとんどすべてで、 全角部分を利用しないこととする、あるいは半角と同じ文字とみなす実装は、 実用上あり得ませんでした。

[21] ISO-2022-JPG0 しか使わないので、 ISO/IEC 2022 の規定の適用範囲外でした。 EUC-JPShift_JIS では禁止されるはずの全角文字も、 ISO-2022-JP では使えることになります。 JIS の立場では重複でないから禁止する必要もないし、 「慣用的な利用」を認める必要もないということになるのでしょうが、 同時に、94図形文字集合942図形文字集合も区別できない同じ文字として扱うことになります。 もちろんそのような実装は、実用上あり得ませんでした。 ISO-2022-JPEUC-JPShift_JIS の3者で相互変換でき、 半角全角の区別も保存される、というのは90年代の日本語文字コード処理の大原則でしたから、 後から JIS がそれと矛盾する規定を加えても、誰も従いませんでした。