円マークとバックスラッシュ(その9) [文字コード]

今までの、ASCII/JIS X 0201/JIS X 0208 などは、文字集合の話であった。これらの文字集合をセットとして、使い分けるための仕組みとして文字コード(文字エンコーディング)が策定されている。
JIS/SJIS/EUC/UTF-8などがそれである。

JISコード

「ISO 2022で規定しているもののうち、7単位符号系によるものを指す」というのが多分、正式なんだろうけれど、通常は、ISO-2022-JPと呼ばれているやつ。
ASCII/JIS X 0201/JIS X 0208を主に使用する。
つまり、3つの文字集合をエスケープキャラクタで切り替えて使用するのだ。
エスケープキャラクタの実際は、

  • ^[$B の後には JIS X 0208-1983 に属する文字
  • ^[$@ の後には JIS X 0208-1978
  • ^[(B の後には ASCII
  • ^[(J の後には JIS ラテン文字*1

がくることになる。

閑話休題
従って、0x5Cを、^[(B のあとに来ればバックスラッシュ
^[(J の後なら円記号として表現されるべきであるが、
実際には Windows上で動く News Reader は
^[(B を使っているにもかかわらず円記号として表現してしまうらしい。*2
まあ、Macだって偉そうなことは言えないのだが・・・

JISコードは7ビットで表現されるため、世界規模で活用される電子メールシステムや、ネットニューズシステムで利用される。
要は、所詮1バイト文字の国から発祥しているInternetで、2バイト文字の言語を使うには気を遣うという話。
8ビット目を無視するシステムでも問題なく使用することができる。
逆に言うと、でっかいテーブルを1個ぶち挙げて、世の中の文字という文字をそん中に入れちまおうぜ!的な、Unicodeの考え方と反対だったりする。

ShiftJISコード

Microsoft社によって策定された。
JIS X 0201 の8ビット符号を拡張し、JIS X 0208 の文字セットを同時に扱えるようにした文字コード。
文字の1バイト目を見るだけで漢字か1バイト文字(いわゆる半角英数字)か分かるということで、コンピュータの内部的には、JISより具合がいいらしい。
ま、そんなこんなで、WindowsもMacも基本的にはこれ。*3
ISO 2022-JPとは相性が悪い、国際的な規格に適合しない、拡張性に乏しい、などの問題点がありながらも、背に腹は的な発想で定着してしまったある意味のDe facto Standard の悪しき例とも(Bill嫌いの人とかによって)言われるらしい。

EUC (Extended UNIX Code)

1985年にAT&T社によって策定された、マルチバイト言語の文字を扱う枠組みというか規定。
主にUNIXシステムで使用されている。
日本語のEUCは特にEUC-JPなんて呼んだりする。
もっと、わかんない言い方をすれば、「ISO 2022の8単位符号系のひとつ」なんても言えたりする。*4
そのおかげでISO 2022-JPと変換しやすいという点以外は、ほぼSJISと同じメリットしかないし、弱点も似ている。(拡張性)

UTF-8

世界中の全ての文字を含む単一の文字集合を定義しようと試みたISO/IEC 10646 という規格がある。
ISO/IEC 10646 には

  • 1文字を4オクテット(32ビット)で表現する正規形 (UCS-4) *5
  • 1文字を2オクテット(16ビット)で表現する簡易形 (UCS-2)

の2種類の使用法が定義されている。
でも、従来のASCII文字も含めたあらゆる文字が2バイトで表されることになる。そうするとASCIIコードとすらも互換性がないが、ASCIIとの互換性を保ったものがUTF-8(Unicode (or UCS) Transformation Format, 8-bit encoding form)である。
ASCII文字が1バイトで表される代わり、ギリシア文字やロシア文字は2バイト、漢字や仮名などは3バイトで表わされる。
UTF-8では,非ASCII文字にはMSB(最上位ビット)が立った(1になった)コード(二進数で10000000から11111111の文字)を用いるのでASCIIとは完全に区別される。
と分かったような分からんような話を書いたけど、要するに、
ISO 2022-JP とは、逆で、くそでかい表を作りましょうと。
その中に、文字を全部ぶち込みましょうと。
それが、ISO/IEC 10646 の考え方であり、ISO2022とは反対の発想なのさと。
その考え方で出来たのがUnicodeというやつだよと。
ところが、Unicodeちゅーても、どのくらいのでかさの表にする?っちゅー部分がまだ、揺れていて、いろいろと種類があるよと。
表の大きさは文字の種類で、変動すればいいんじゃん?と。
そすれば、ASCII文字との互換性も保てるじゃんかしさぁ〜と。
それが、UTF-8 だよと。
ま、そのくらいしか、私も理解してない。

  • 注1 = JIS X 0201 ローマ字 = JIS X0201-1976 Roman Set
  • 注2極力、Windowsには触れたくないので、私は知らないが、そんな話がここそこで聞こえては来る
  • 注3WindowsもIE5からDOMを使用しているとかで内部的にUnicodeで処理されている部分もあるらしいし、Mac OS X も、内部的にUnicodeを使用している部分が大きいという事実もある
  • 注4つまり、ISO 2022は別に7bitのISO 2022-JPだけを指すのではないという話
  • 注5“Universal Multiple-Octet Coded Character Set” の略

コメント

タイトルとURLをコピーしました