JIS X 0208について調査してみた(3)

前回までは、

  • 漢字用7ビット符号
  • 漢字用8ビット符号
  • 国際基準版・漢字用7ビット符号
  • 国際基準版・漢字用8ビット符号(EUC-JPの一部)

まで確認しまして、次に行きたい所なのですが、
EUC-JPが「JIS X 0208」をベースにしているので、そちらも同時に確認します。

EUC-JP

EUCーJP」は、Extended UNIX Code Packed Format for Japaneseの略で、
UNIX上で日本語を扱うために生み出された、8ビットの2バイト文字コード。(シングルシフトは制御文字なので計算に入れていない。)

国際基準版ISO/IEC 646を(ASCII)をGL領域で、「JIS X 0208」の漢字集合をGR領域で用いるので、
JIS X 0208」の「国際基準版・漢字用8ビット符号」と同様になる。

しかし、「EUC-JP」は、「JIS X 0201」の片仮名用図形文字集合と、「JIS X 0212」の補助漢字も使えるので
EUC-JP」が「JIS X 0208」を包含している(サブセットとしている)。

従って、「EUC-JP」のGR領域では、以下の文字集合を切り替える必要が出てくる。

JIS X 0208」の漢字集合は、予めGR領域に呼び出されている。(ロッキングシフトされてる?)
JIS X 0201」片仮名用図形文字集合をGR領域に呼び出すときは、シングルシフト(SS2)を用いる。
JIS X 0212」の補助漢字をGR領域に呼び出すときには、シングルシフト(SS3)を用いる。

いずれのシングルシフトも、次の1文字だけ文字集合を切り替える。
従って、見た目は3バイトに見えるが、シングルシフトは制御文字なので、文字自体は2バイトという事になる。

ここまでは、Wikipediaなどで確認できる情報なのだけど、
ここから先を「EUC-JP」の規格書などを参考して調査しようと思ったのですが・・・
どれがどれかワカラネエェェェ・・・・

色々調べたのですが、そもそもEUC自体に歴史があり、ここを調べてるだけでかなりの時間が経過しておりました。

そして、一番気になったのが、そもそも「EUC-JP」ってどういう規格なの?ってことでした。
これに関しては、EUCという規格があり、それの日本語ローカライズ版が日本語EUCと呼ばれていて、
さらにその中で「JIS X 0208」がベースになっているものが「EUC-JP」と呼ばれているものらしいです。

http://ja.wikipedia.org/wiki/Extended_Unix_Code

他にも色々と気になる部分があったのですが、「JIS X 0208」自体の調査から外れすぎるので後の記事にしたいと思います。
これは今回調査するべきじゃなかったなー、規模がデカすぎた・・・

資料だけをメモ

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

とりあえず、一旦、EUC(日本語EUCEUC-JPなどなど)は忘れて次の符号化方式を調べてみます。

こちらは、「JIS X 0201」のラテン文字用図形文字集合と「JIS X 0208」の漢字集合を用いる場合。
これも、当然のことながら重複する文字があるので、

JIS X 0201規定され図形文字と同じ図形文字は用いてはならない。
ただし、これまでの慣用的なり用と互換を目的としてだけ、附属書5表2に規定する文字をJIS X 0201規定される文字とはことなった図形文字として用いてもよい。


JIS X 0208」7.3 JIS X 0201ラテン文字と同時に用いる場合の符号より引用

となっており、国際基準版の時と似ている。

ちなみに、国際基準版(ISO/IEC 646)と「JIS X 0208」の違いは、

92番の文字にバックスラッシュ ('\') の替わりに円記号 ('¥') が、126番にチルダ ('~') の替わりにオーバーライン ('‾') が割り当てられている。


Wikipedia JIS X 0201 より引用 http://ja.wikipedia.org/wiki/JIS_X_0201

となっております。

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

7ビット符号なので、GR領域は存在しません。
なので、この場合は、両方の文字集合をGL領域に割当て、いつものようにシフトアウト(SO)、シフトイン(SI)によって文字集合を切り替えて運用します。

  • CL領域には、JIS X 0211のC0集合を割り当てる。
  • GL領域には、次の図形文字集合を割り当てる。
    • SIが先行し、次のSOが現れるまでは、ラテン文字用図形集合を割り当てる。
    • SOが先行し、次のSIが現れるまでは、漢字集合を割り上げる。

JIS X 0208」7.3.1 ラテン文字・漢字用7ビット符号より引用

こちらも、国際基準版の時とあまり違いがありません。

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

8ビット符号なので、2つの文字集合をそれぞれ、GL領域、GR領域に割り当てて運用します。

  • CL領域には、JIS X 0211のC0集合を割り当てる。
  • GL領域には、ラテン文字用図形文字集合を割り当てる。
  • CR領域には、JIS X 0211のC1集合を割り当てるか又は何も割り当てないかのいずれかとする。
  • GR領域には、漢字集合を割り当てる。
    • CR領域にJIS X 0211のC1集合を割り当てない場合、CR領域は空き領域とし、他の図形文字を割当ててはならない。

JIS X 0208」7.3.2 ラテン文字・漢字用8ビット符号より引用

さて、これで残りは、

となりましたが、両方とも内容が多くなりそうなので、個別に調査していく予定でございます。

JIS X 0208について調査してみた(2)

前回の続きでございます。
JIS X 0208」の8つの符号化文字集合についてそれぞれ調査していきます。

漢字用7ビット符号

この符号化文字集合は、7ビットを2つなげた2バイトの文字で構成されており、
1バイトが混在することのない固定長となる。

  • CL領域には、JIS X 0211のC0集合を割り当てる。
  • GL領域には、この規格の6.5.1で規定する漢字集合を割り当てる。


JIS X 0208」7.1.1 漢字用7ビット符号より引用

GR領域は、そもそも存在しない。(7ビットなので)

注意しておきたいのは、

1バイトコードとの混在がないので、数字の「1」を示す符号化表現は「23 31」という2バイトのものしか存在せず、「全角・半角」という使い分けはありません。


プログラマのための文字コード技術入門 矢野啓介 P.124

後述の符号化文字集合だと、「ISO/IEC646 国際基準版(ASCII)」と併用したりできるので、「ISO/IEC 646 国際基準版」の方を半角数字、「JIS X 0208」の漢字集合の方を全角数字として実装されることがあるらしいですが、この漢字用7ビット符号に関しては、その区別は無いということになります。

企業間での電子データの交換に用いられるフォーマットなどで用いられているらしい。

参考

電子データ交換(でんしデータこうかん、EDI、Electronic Data Interchange)

CII標準 (CIIシンタックスルール、CII標準ベースXML/EDI (CII/XML)) - 日本の標準。JIS X 7012

http://ja.wikipedia.org/wiki/%E9%9B%BB%E5%AD%90%E3%83%87%E3%83%BC%E3%82%BF%E4%BA%A4%E6%8F%9B

漢字用8ビット符号化

7ビットの場合と似ている。

  • CL領域には、JIS X 0211のC0集合を割り当てる。
  • GL領域には、この規格の6.5.1で規定する漢字集合を割り当てる。
  • CR領域には、JIS X 0211のC1集合を割り当てるか又は何も割り当てないかのいずれかとする。
  • GR領域は、用いてはならない。


JIS X 0208」7.1.2 漢字用8ビット符号より引用

結局これって、GR領域使わないので、図形文字はすべて、MSBが必ず「0」になっている。
但し、CR領域にC1集合を割り当てた場合は、MSBに「1」がセットされることもある。

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

「ISO/IEC646 国際基準版(ASCII)」と「JIS X 0208」の漢字集合を同時に用いる場合は、以下の規則がある。

ISO/IEC 646」で規定されている図形文字と同じ文字は用いてはならない。

ただし、これまでの慣用的な利用との互換を目的としてだけ、附属書5表2に規定する文字を「ISO/IEC 646」で規定される文字とはことなった図形として用いてもよい。


JIS X 0208」7.2 ISO/IEC 646の国際基準版(IRV)と同時に用いる場合の符号より引用

つまり、重複文字に関しては「ISO/IEC 646」を優先して使えという決まりがある。
ただし、互換性を維持する目的の場合のみ漢字集合側の符号を使ってもいいという事らしい。
でも原則的には、「ISO/IEC 646」で。

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

こちらは、「JIS X 0201」の7ビット符号化文字集合の時と似ている。

  • CL領域には、JIS X 0211のC0集合を割り当てる。
  • GL領域には、次の図形文字集合を割り当てる。
    • SIが先行し、次のSOが現れるまでは、国際基準版図形文字集合を割り当てる。
    • SOが先行し、次のISが現れるまでは、漢字集合を割り当てる。
      • この符号化文字集合の初期状態におけるGL領域への割当がどりらの図形文字集合であるかは、送信者と受信者との間の合意によって定まる。ただし、一般的には国際基準版図形文字集合とするのが望ましい。


JIS X 0208」7.2.1 国際基準版・漢字用7ビット符号より引用

おうけい。いつも通り。「JIS X 0201」と異なるのは、切り替える文字集合が違うという所。
初期状態も、国際基準版をデフォルトにするのが推奨されているだけでとくに違いはない。

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

8ビットの場合は、切り替えが必要なくそのまま2つの文字集合を呼び出せるので、7ビットの時より単純になる。

  • CL領域には、JIS X 0211のC0集合を割り当てる。
  • GL領域には、国際基準版図形文字集合を割り当てる。
  • CR領域には、JIS X 0211のC1集合を割り当てるか又は何も割り当てないかのいずれかとする。
  • GR領域には、漢字集合を割り当てる。


JIS X 0208」7.2.2 国際基準版・漢字用8ビット符号より引用

めちゃ単純です。

長くなってきたので、EUCとその他の符号化文字集合については次回に。

JIS X 0208について調査してみた(1)

0211や0202も気になったのですが、とりあえず後で戻るという前提で
JIS X 0208」の調査に移行でございます。

戻って帰って来れなくなるどころか、そのまま死亡して行方不明になる可能性も少なからずあるわけですが、そんな事にいちいちビビって文字コードと向き合えるかいっ!

http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X0208

またこのサイトのお世話になります。

そもそものお話

JIS X 0208」は、7ビット、又は、8ビットの符号を2つ組み合わせた、2バイトの符号化文字集合の規格。

あれ?w 7ビット2つ組み合わせても、14ビットで2バイトにならなくね?とか思うじゃないですかー?
私もそう思います。

第8ビット目に必ず0をセットしてるから特に問題ないと言われても、それって8ビットやんとか思ってしまいます。

「5.1.1 7ビット符号化文字集合」の記法のところでは、7ビット分しか説明されていません。
しかし、「6.1.1 7ビット符号化文字集合の構造」にある表では8ビット目が記載されています。

そこで何気なく、「バイト」という言葉の理解を確かめるためにWikipediaで調べると衝撃の事実が。

本来バイトとは、欧文文字1字分の文字コードを表現するために用いるビット数のことをいい、扱う文字種や、あるいはワードサイズをいくつかに分割することによって決められ、その大きさは処理系によって異なる。

例えば情報通信の分野などにおいて、情報量の単位として特に8ビットであることを明示する(曖昧さを無くする)必要がある場合は「オクテット」の語を用いる。

Wikipedia バイト (情報)より引用
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88_(%E6%83%85%E5%A0%B1)

Ω ΩΩ< な、なんだってー!!

バイト(byte) 一つの単位として操作するビット列。各ビットは、0又は1の値をもつ。


JIS X 0208」4.定義より引用

ふあー。そもそも言葉の定義の認識がズレておりました。
バイトという単位は絶対的な尺度じゃないんですね。

話がズレて参りましたが、このバイトを組み合わせて2バイトにして「区」と「点」を表すというわけです。

ですので、「JIS X 0201」の片仮名文字集合は、行と列を指定した「点」を表す2次元的な集合ですが、そこに「区」が入るので3次元的な集合になるということですね。

JIS X 0208」で定義されている符号化文字集合

全部で8つ用意されている。

上の6つは規格票本体に、下の2つは附属書に定義されている。

「漢字用7ビット符号」と「漢字用8ビット符号」は、「JIS X 0208」で定義されている漢字集合のみを利用する場合の符号。(7.1)

「国際基準版・漢字用7ビット符号」と「国際基準版・漢字用8ビット符号」は、「ISO/IEC 646」の国際基準版と、漢字集合を同時に用いる場合の符号。
しかし、この場合、漢字集合の方にもアルファベットのような「ISO/IEC 646」の国際基準版と重複する様な文字が出てきてしまう。この場合は、原則的に「ISO/IEC 646」の国際基準版の符号を用いる。(7.2)

ラテン文字・漢字用7ビット符号」と「ラテン文字・漢字用8ビット符号」は、「JIS X 0201」のラテン文字集合と漢字集合を同時に用いる場合の符号。こちらも同じく、重複文字は、原則的にラテン文字集合を優先する。(7.3)

「シフト符号化文字集合」と「RFC 1468符号化文字集合」は1バイトと2バイトを混在した符号化文字集合。これは複雑なので後で1つずつ調査していく予定。

JIS X 0201について調査してみた(3)

昨日の調査がすべて「JIS X 0202」だったのに戸惑いを隠せないわけですが、
きょうは気を取り直してもう一度。

http://www.jisc.go.jp/app/pager?id=299893

つーか、PDFをダウンロードさせて欲しい。
JISって著作権ないとか有るとかもめてるらしいけど不便すぎるって!

符号化文字集合の構成

7ビットの場合は、

  • CL領域は、0/0~1/15の32個の制御文字
  • GL領域は、2/0のSPACEと7/15のDELETEを除く、2/1~7/14の94個の図形文字

(5.1.1 8ビット符号化文字集合の構造より引用)

OK、ここまで問題なし。

8ビットの場合は、
7ビットの領域にさらに以下の領域が追加

  • CR領域は、8/15~9/15の32個の制御文字
  • GR領域は、10/1~15/14の94個の図形文字
  • GR領域の、10/0、15/15は未定義で、将来の標準化のために保留

(5.1.2 8ビット符号化文字集合の構造より引用)

つまり、GRの文字集合もCRでSPACEとDELETEが入る部分は除外される。

符号化文字集合の呼び出し

ラテン文字だけを7ビットで使う場合は、

GL領域にはラテン図形文字集合を割り当てる。

(6.1 ラテン文字用7ビット符号より引用)

片仮名だけを7ビットで使う場合は、

GL領域には片仮名用図形文字集合を割り当てる。

(6.2 片仮名用7ビット符号より引用)

お次がお待ちかねの7ビットでラテンと片仮名を両方使う欲張りパターン

ラテン文字・片仮名用7ビット符号は、制御文字SHIFT-OUT(シフトアウト)とSHIFT-IN(シフトイン)との交互利用によって、ラテン文字用図形文字集合及び、片仮名用図形文字集合を切り替えて使用する7ビット符号化文字集合とする。

(6.3 ラテン文字・片仮名用7ビット符号より引用)

となっており、ここも問題なし。

GL領域には、SIが先行し、次のSOが現れるまでは、ラテン文字用図形文字集合が割り当てられる。
GL領域には、SOが先行し、次のSIが現れるまでは、片仮名用図形文字集合が割り当てられる。

この符号化文字集合の初期状態におけるGL領域への割当てがどちらの図形文字集合であるかは、送信者と受信者との間の合意によって定まる。ただし、一般的にはラテン文字用図形文字集合とするのが望ましい。

(6.3 ラテン文字・片仮名用7ビット符号より引用)

最後の備考のところに、初期状態に関する記述がありました。
これも、前々日の理解と合致。

お次は、8ビットの場合、

GL領域には、ラテン文字用図形文字集合を割り当てる。
GR領域には、片仮名用図形文字集合を割り当てる。
CR領域にJIS X 0211のC1集合を割り当てない場合は、CR領域は空き領域とし、他の文字を割り当ててはならない。

前々日の疑問だった、8ビット字に割り当てられる文字集合は決まってるのかという話が書いてありました。GLはラテンでGRは片仮名と決められていました。

CR領域のほうは、JIS X 0211のC1集合を割り当てるか、空にしとけってことですね。

合成文字について

すべての図形文字は、現在位置の前進動作を伴う文字(スペーシング文字)とする

と書いておりますが、

JIS X 0211のBACKSPACE(後退)又は、CARRIAGE RETURN(復帰)を使用することによって、2文字以上の図形文字を同じ位置に重ねて表示することができる。

おおいw案外合成できるんじゃねえかw
しかし、参考に書かれているように、開放型環境での情報交換を確実にするために、合成文字は使用しないほうがいいとのことです。

制御文字領域は詳しく調べてませんが、こちらは、JIS X 0211(ISO/IEC 6429)を調べる必要がありそうです。

ひとまずこれで、JIS X 0201についての調査は終わり。
間違って読んでしまった0202の方が気になってきた・・・。

JIS X 0201について調査してみた(2)

やってもうたー。読んでたのは「JIS X 0202」の規格でした。
Chromeで開かないのでIEにコピペしたら何故か「JIS X 0202」のPDFが開いてました。
\(^o^)/オワタ
ですので、下記の内容は「JIS X 0202」です。(2014/04/24追記)

昨日の続き

JIS X 0201」の規格が以下のサイトでみれるのでパラパラと読んでみた。

http://www.jisc.go.jp/app/pager?id=0&RKKNP_vJISJISNO=X0202&%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp

固定符号化文字の存在

DELETE(07/15)とESCAPE(01/11)とSPACE(02/00)は符号化が固定されているらしい。
しかし、後述の96文字集合つかうとDELETEとSPACEが別の文字に割り当てられるのでは?
どうすんのこれ。
CL領域になっているESCAPEは問題なさそうだけど。やっべ難しい。

符号化図形文字集合について

94文字集合だけかと思いきや・・・あれ、96文字集合も使えるんだ?!
驚きなんですけどー。

てか94^nとか96^nってなんなんだーっていう。

で、詳しく読んでみると、どうやらマルチバイトに対応しているらしい。(6.3.1 符号化図形文字集合の種類)
面(といっていいのか微妙だけど)の指定も
94^nなら02/01から07/14で、
96^nなら02/00から07/15となるらしい。

うほまじでー。
nって表記が気になる。群、面、句、点に拡張することもできるのだろうか。
94文字集合の場合、3バイトを使うマルチバイト集合だと約83万文字収録できることに。
いまさらどうしろって話ですけど。

ちなみに、ESCAPEは、基本集合(CL)以外に入れたらアカンらしい。

基本集合(00/00から01/15)は、ESCAPEを含まなければならない。補助集合(08/00から09/15)は、この文字を含んではならない。

8ビットの場合

  • 00/00から01/15はCL領域
  • 02/00から07/15はGL領域
  • 08/00から09/15はCR領域
  • 10/00から15/15はGR領域

ここまではおk。

で、その領域の説明

CL:制御文字の基本集合
GL:SPACE及びDELETEと94文字若しくは94^n文字の図形文字と集合、又は96文字若しくは96^n文字の図形文字の集合
CR:制御機能の補助集合又は未使用
GR:94文字若しくは94^n文字の図形文字(10/00及び15/15は、未使用とする。)の集合、96文字若しくは96^n文字の図形文字の集合、又は未使用

又、96、96^n文字集合がGL、GR領域に呼び出された時は、02/00と07/15にも図形文字を割り当てていいらしい。
その場合、SPECEとDELETEはどこに行くんだっていう疑問が。。。単に使えなくなるだけ?

とりあえずJIS X 0201の調査はこのくらいにしとこうかなー。
と思ったけど、ロッキングシフトやらシングルシフトの話がきになるのでもう少し仕様書を読むやも。
あまり深入りしたくない分野やけどなー。

JIS X 0201について調査してみた

テキトーな調査メモなのでツッコミ歓迎。

概要

JIS X 0201(通称ANKコード*1)」は、7ビットもしくは8ビットで利用できる符号化文字集合

JIS X 0201」には2つの文字集合がある。

つまり、片仮名とアルファベットが使える。漢字は使えない。

そいで、この2つの文字集合をどうやって使うかなんだが、、、
運用方式が4つあるらしい。

  • 両方の7ビット文字集合にMSB(最上位ビット)を追加し8ビットにして両方を一度に使う
  • 7ビットで片方の文字集合のみ使う(固定する)
  • 7ビットで制御文字によって2つの文字集合を切り替えながら使う。

この、片仮名用図形文字集合に収録されている片仮名が、半角カナの大本らしい。

8ビットでの運用

JIS X 0201」は、「ISO/IEC 2022」の規格に準拠していて、
GL領域にラテン文字用図形文字集合を、
GR領域に片仮名用図形文字集合
呼び出して運用する。
つまり、GL領域に呼び出されたラテン文字用図形文字集合は、MSBが0になり、GR領域に呼び出された片仮名用図形文字集合は、MSBが1になる。

ちなみに、逆に呼び出すことは禁止されているのだろうか。

ちょっと話がズレるけど、「ISO/IEC 2022」という規格は、「ISO/IEC 646」を組み合わせて運用するという目的なので、「JIS X 0201」が利用している2つの文字集合は、必然的に「ISO/IEC 646」にも準拠している形になっている。なので、左上と右下が1つ欠けた「0x21」から「0x7E」までの範囲になる。

JIS X 0201」には、濁点付きの片仮名が無いので、独立した濁点を静音の文字の後に置く*2

7ビットでの運用

使いたい方の文字集合をGL領域に固定して使う。
両方使いたい場合は、7ビットなのでMSBによる識別ができない。
よって、以下の制御文字を用いて、文字集合を切り替えながら利用する。

  • SHIFT-OUT(シフトアウト)が現れると、片仮名用図形文字集合へ切り替え
  • SHIFT-IN(シフトイン)が現れると、ラテン文字用図形文字集合へ切り替え

初期状態は、どっちでもいいらしいが、基本的にラテン文字用図形文字集合の模様。

*1:アルファベット (Alphabet)、数字 (Numerical digit)、片仮名 (Katakana) の頭文字

*2:プログラマのための文字コード技術入門 P.119 矢野啓介