JIS X 0213のあまり代表的でないかもしれない符号化方式

文字コード規格のJIS X 0213 (2004年に改正されたので、俗に JIS2004ともいいます) には、規格本体に6種類、 附属書に3種類の符号化方式が定義されています。ここでは、規格本体に 記されている6種類の符号化方式を解説します。これらの符号化方式はあまり メジャーなものとみなされてはいませんが、用途によっては有用なものです。 中でも、「国際基準版・漢字用8ビット符号」はむしろ代表的な符号化方式 といっても過言ではないくらいに実用性のある符号化方式です。 これらの符号化方式を知ることで、場面に応じて適切なデータフォーマット を設計することができるでしょう。

なお、附属書に記されている3種類の符号化方式については、姉妹編の「JIS X 0213 (JIS2004)の代表的な符号化方式」を ご参照ください。

文字コードの構造(ISO 2022)の基礎知識については、『 文字コードの世界』のような参考書を参照してください。G0, G1, GL, GR といった用語の理解が必要です。ウェブで読める解説では「文字コードの話」の第4章がよいでしょう。また、JIS X 0213の文字表 の構成の基本的な知識については姉妹編の「文字表の構成」の節をご参照ください。

以下、0xで始まる数は16進表記です。

符号化方式の種類

規格本体に6種類もの符号化方式が定義されているというと、なぜそんなに 多くの符号化方式があるのだろうかと疑問に思うかもしれません。そこでまず は、符号化方式の種類の一覧をご覧ください。これらはJIS X 0208:1997から踏 襲されたものです。

この6種類の符号化方式は、2つの軸で構成されています。すなわち、

上に掲げた符号化方式の名称のうち、「漢字用」と冠されているのはJIS X 0213を単独で使うものです。一方、「国際基準版・漢字用」はJIS X 0213と ASCII (正確にはISO/IEC 646 国際基準版) とを組み合わせて使うもので、「ラ テン文字・漢字用」はJIS X 0213とJIS X 0201ラテン文字集合 (ASCIIのバック スラッシュの箇所が円記号になっている) とを組み合わせて使うものです。

したがって、上の箇条書きは下記の表にして表すことができます。

7ビット 8ビット
JIS X 0213単独 漢字用7ビット符号 漢字用8ビット符号
国際基準版と併用 国際基準版・漢字用7ビット符号 国際基準版・漢字用8ビット符号
JISラテン文字と併用 ラテン文字・漢字用7ビット符号 ラテン文字・漢字用8ビット符号

「7ビットか8ビットか」をどう使い分けるかは、7ビットしか許さない環境 では7ビット符号を使い、それ以外では8ビット符号を使うということになるで しょう。7ビットしか許さない環境には、例えばインターネットの電子メールが あります。ただしこうした制約のある環境はそう多くはないので、一般的 には8ビットを選択すれば良いことになります。

単独か、国際基準版と併用、あるいはJISラテン文字と併用という3つのバリ エーションは、なぜ必要なのでしょうか。

JIS X 0213は、JIS X 0208とは違って、ISO/IEC 646国際基準版の文字も JIS X 0201 ラテン文字も全て含んでいます (JIS X 0208は、これらの7ビット 符号に含まれる文字のうちTILDE (~)とQUOTATION MARK (")とAPOSTROPHE (') とHYPHEN-MINUS (-)を含みません)。したがって純粋にある文字が符号化できる か否かという観点では、どれを選択しても変わりありません。ここでは所謂 「全角・半角」を無視して説明しています。

では「漢字用」符号だけがあれば良いかというと、実際にはそうはいかない ことがあります。7ビットの0x20〜0x7eの範囲はASCIIのような既存の1バイトコー ドを使いたいという需要があるからです。これは歴史的経緯によるものです。 もともとASCIIだけを対象にしていた処理系を拡張してその他の文字も扱うこと にすると、0x20〜0x7eはASCIIと同じ文字を表すようになっていないと具合が悪 いわけです。典型的には、CやPerlといったプログラミング言語や、HTML等の機 械処理用データフォーマットでこうしたことがおこります。

そこで、JIS X 0213を、ASCIIと同じ文字表であるISO/IEC 646国際基準版と 併用する符号化方式と、(ASCIIの一部の記号だけが異なる文字表である) JIS X 0201ラテン文字と併用する符号化方式とが用意されているわけです。

インターネット上のプロトコルやデータフォーマットなどはASCIIが基本に なっているので国際基準版と併用する符号化方式が便利でしょう。また、かつ て1バイトコードとしてJIS X 0201を採用していたシステムにJIS X 0213を追加 する場合は、JISラテン文字と併用する符号化方式の採用を検討する価値があり ます。一方、1バイトコードとの互換性が不要な場合にはJIS X 0213単独の符号 化方式が良いことになります。

実装水準

JIS X 0213は、実装水準3と実装水準4という、2段階の実装水準を設けてい ます。実装水準3は、JIS X 0213の2つの面のうち第1面だけの実装、実装水準4 は第1面・第2面両方とも実装するフルセットの実装を指します。第1面は漢字 第1〜第3水準ならびに非漢字、第2面は第4水準漢字を含んでいます。

実装水準はいずれの符号化方式を使う場合でも適用可能です。例えば、 「国際基準版・漢字用8ビット符号の実装水準3」だとか「漢字用8ビット符号 の実装水準4」といった言い方で、どこまで実装しているかを表すことができ ます。

このような水準を設けている理由は、JIS X 0213をフル実装するには第2面 という従来のJIS X 0208に無かった要素に対応する必要があり、実現のハード ルが高いからです。第1面を実装するためにはJIS X 0208の文字表の空き領域を 文字で埋めるだけで済みますからプログラム的にはほとんど何もせずに済みま す。しかし第2面のためには異なる対応をする必要があります。そこで、実装容 易性に応じて2つの水準が設けられているのです。

以下に述べる各符号化方式を見ると、実装水準4のためには、JIS X 0208の ときに比べて新たな制御文字を解釈するなどの対処が必要なことが見てとれる でしょう。

各符号化方式の詳細

この節では6種類の符号化方式それぞれの構造を示します。

漢字用7ビット符号

[漢字用7ビット符号の構造図]

漢字用7ビット符号は、漢字集合1面と2面とを適宜GL領域に呼び出して使う 符号です。1面と2面の切り替えは、制御文字のSO (シフトアウト、コード値 0x0e)、SI (シフトイン、0x0f) によって行います。同じバイト列であっても SOの後かSIの後かによって示す文字が異なるので、状態を持つ (statefulな) 符号化方式ということになります。

初期状態ではGLに1面が呼び出されています。SOが現われるとそこから先は 2面に切り替わります。SIが現われるとまた1面に切り替わります。

ただし、実装水準3では2面を使わないため、SOは使いません。SOを使わなけ ればSIを使う必要もありません。したがって、実装水準3におけるこの符号化方 式は、SOもSIも現われない、状態を持たない (statelessな) 符号化方式となり ます。

JIS X 0208の「漢字用7ビット符号」との関係

JIS X 0213の「漢字用7ビット符号」は、JIS X 0208の同名の符号化方式の 上位互換になります。JIS X 0208の場合は文字集合が1面しかなく切り替えが発 生しません。このため、もともとJIS X 0208の漢字用7ビット符号に対応してい たソフトウェアをJIS X 0213に対応させるには、SO/SIによる切り替えに対応さ せる必要があります。もしSO/SIへの対応が困難であるなら、実装水準3にする ことで部分的対応にするという妥協策があります。

漢字用8ビット符号

[漢字用8ビット符号の構造図]

漢字用8ビット符号は、GLにJIS X 0213の1面を、GRに2面を呼び出した状態 の符号です。すなわち、7ビットの範囲はJIS X 0208の上位互換になり、最上位 ビット (MSB) の立ったバイト範囲には2面がすっぽり入ることになります。

この方式には、全ての文字が2バイト固定で表されるという利点があります。 固定長のデータフォーマットなどに向くでしょう。特に、もともとJIS X 0208 の7ビット符号を使っていた場合には互換性を保ったまま拡張することができ ます。

例えば、企業間のデータ交換 (EDI; Electronic Data Interchange) に使わ れるCIIシンタックスルールというフォーマット (JIS X 7012) を例にして考え てみましょう。このフォーマットにおいては1バイト文字と2バイト文字それぞ れを用いるフィールドが区別されており、2バイト文字 (漢字属性) のフィール ドにはJIS X 0208の7ビット符号が格納されることになっています。この規格を 拡張してJIS X 0213に対応させるとしたら、「漢字用8ビット符号」を採用する ことで、従来のデータとの互換性を保ち、データ長にも何ら影響を与えること なく、JIS X 0213に移行することが可能となるわけです。

(余談ながら、CIIシンタックスルールにはJIS X 0212対応として、第1バイ トのみのMSBが立っている2バイト符号はJIS X 0212の文字とみなすという方法 がありました。漢字用8ビット符号の漢字集合2面は第1・第2バイトともMSBが立 つので、この方法によるJIS X 0212と区別できることになります。)

JIS X 0208の「漢字用8ビット符号」との関係

JIS X 0213の「漢字用8ビット符号」は、JIS X 0208の同名の符号化方式の 上位互換になります。

JIS X 0208の漢字用8ビット符号においてはGR領域は未使用なので、その空 白地帯をJIS X 0213の2面が埋める形になります。JIS X 0208の漢字用8ビット 符号というのは、その名前の印象とは裏腹に、実際には8ビット目をほとんど使 わない (図形文字としては全く使用せず、制御文字だけは割り当てがある) と いうものだったことに注意が必要です。

国際基準版・漢字用7ビット符号

[国際基準版・漢字用7ビット符号の構造図]

国際基準版・漢字用7ビット符号は、JIS X 0213の1面・2面とISO/IEC 646 国際基準版をGL領域に適宜呼び出して使う符号です。状態を持つ符号化方式で す。

基本的には初期状態はISO/IEC 646国際基準版で、SOが現われると漢字集合 1面に切り替わります。その後SIによってまたISO/IEC 646国際基準版に切り替 わります。ただし、制御文字SS3 (シングルシフトスリー、0x1b 0x4f というエ スケープシーケンス) の直後の1文字分は漢字集合2面の文字となります。SS3 の効力は1文字分しか及ばないので、2面の文字が連続する場合には1文字ずつ先 頭にSS3を付ける必要があります。

ここで初期状態について「基本的に」とただし書きを付けたのは、送信者 と受信者の合意があれば初期状態を漢字集合1面としても良いためです。

この符号は7ビットの環境でASCIIとの互換性が求められる場合に利用できま すが、同じ目的ならばISO-2022-JP-2004でも良いという見方もあるでしょう。

JIS X 0208の「国際基準版・漢字用7ビット符号」との関係

JIS X 0213の「国際基準版・漢字用7ビット符号」は、JIS X 0208の同名の 符号化方式の上位互換になります。

ただし、JIS X 0208の場合はSS3を用いていなかったため、JIS X 0213に対 応するにはこの制御文字を解釈できるようにすることが必要になります。もし SS3への対応が困難であるなら、実装水準3とすることで部分的対応にするとい う妥協策があります。

国際基準版・漢字用8ビット符号

[国際基準版・漢字用8ビット符号の構造図]

GLにISO/IEC 646国際基準版を呼び出し、GRにJIS X 0213の1面を呼び出した 状態を固定した形になります。JIS X 0213の2面はG3に指示されており、制御文 字SS3 (この場合は0x8f。前述の7ビット符号の場合と異なることに注意) によっ て直後の1文字分の間だけGRに呼び出されます。

この符号化方式は、JIS X 0201片仮名がない点を除けばEUC-JIS-2004と同一です。したがっ て、EUC-JIS-2004と称している文書であっても、JIS X 0201片仮名を含んでいなけ れば「国際基準版・漢字用8ビット符号」の文書でもあるといえることになりま す。

ASCIIとの互換性が必要な場面では、JIS X 0213の符号化方式の中で最も素 直な方式であるといえるでしょう。

JIS X 0208の「国際基準版・漢字用8ビット符号」との関係

JIS X 0213の「国際基準版・漢字用8ビット符号」は、JIS X 0208の同名の 符号化方式の上位互換になります。

ただし、JIS X 0208の場合はSS3を用いていなかったため、JIS X 0213に対 応するにはこの制御文字を解釈できるようにすることが必要になります。もし SS3への対応が困難であるなら、実装水準3とすることで部分的対応にするとい う妥協策があります。

JIS X 0208の「国際基準版・漢字用8ビット符号」とは、所謂EUC-JPのサブ セット (JIS X 0201片仮名とJIS X 0212補助漢字を除いたもの) にあたります。 「EUC-JP」として実質的にJIS X 0208の国際基準版・8ビット符号に対応してい たプログラムでは、補助漢字への対応としてSS3に対応していることがあると思 いますが、そのようなプログラムでは何もせずともJIS X 0213の「国際基準版・ 漢字用8ビット符号」が扱える可能性があります。

ラテン文字・漢字用7ビット符号

[ラテン文字・漢字用7ビット符号の構造図]

上述の「国際基準版・漢字用7ビット符号」のISO/IEC 646国際基準版をJIS X 0201ラテン文字集合に置き換えたものです。

JIS X 0208の「ラテン文字・漢字用7ビット符号」との関係

JIS X 0213の「ラテン文字・漢字用7ビット符号」は、JIS X 0208の同名の 符号化方式の上位互換になります。

ただし、JIS X 0208の場合はSS3 (0x1b 0x4f) を用いていなかったため、 JIS X 0213に対応するにはこの制御文字を解釈できるようにすることが必要に なります。もしSS3への対応が困難であるなら、実装水準3とすることで部分的 対応にするという妥協策があります。

ラテン文字・漢字用8ビット符号

[ラテン文字・漢字用8ビット符号の構造図]

上述の「国際基準版・漢字用8ビット符号」のISO/IEC 646国際基準版をJIS X 0201ラテン文字集合に置き換えたものです。

JISラテン文字との互換性が必要な場面では、最も素直な符号と考えられま す。(Shift_JIS-2004という手もあ りますが…)

JIS X 0208の「ラテン文字・漢字用8ビット符号」との関係

JIS X 0213の「ラテン文字・漢字用8ビット符号」は、JIS X 0208の同名の 符号化方式の上位互換になります。

ただし、JIS X 0208の場合はSS3 (0x8f) を用いていなかったため、JIS X 0213に対応するにはこの制御文字を解釈できるようにすることが必要になりま す。もしSS3への対応が困難であるなら、実装水準3とすることで部分的対応に するという妥協策があります。


蛇足1

「国際基準版・漢字用8ビット符号」といった名前はいかにも長いので、もっ と短くて言いやすい略称があるといいと思いました。タイプするのが面倒です。 読むのもたいへんだろうと思います。

蛇足2

本稿では制御文字集合についての規定はばっさり省略しました。必要な方は 規格にあたってください。

蛇足3

図についてあまり細かいつっこみはいれないようお願いします。94文字集合 なんだから左上と右下の欠けた四角の方がいいとか、2バイト文字集合は立体的 にした方がいいとか、わかってはいるのですが面倒なので簡略化しています。

蛇足4

実装水準4は必要でしょうか? 実装水準3で十分でしょうか? それは用途によ ります。JIS X 0213を採用する理由が非漢字に関するものであるなら、実装水 準3で問題ないでしょう。例えば、丸付き数字を使いたいとか、フランス語など のアクセント付きアルファベットを使いたいとか、アイヌ語を書きたいとかの 場合です。また、漢字を理由に導入するとしても、人名用漢字や一部の正字体 (「涜」の本当の字など) が扱えればいいだけならやはり実装水準3でいいかも しれません。しかし、相当に見慣れないような漢字が出てくる可能性がある、 あるいは部首を表す字体記述要素 (しんにょうなど) を書きたいといったとき は、実装水準4が必要になります。

なお、姉妹編で説明した附属書の3種類の符 号化方式にも、「実装水準3」「実装水準4」が定義されています。姉妹編を書 いたときはあまり必要ないだろうと判断して特に触れなかったものです。実装 水準は本体の符号化方式にしかないわけではないことにご注意ください。


関連規格、文献、URL


矢野啓介 (yano {AT} moon {DOT} email {DOT} ne {DOT} jp)
2009年2月 初版公開