文字コード超研究 17章〜18章
- 作者: 深沢千尋
- 出版社/メーカー: ラトルズ
- 発売日: 2011/07/19
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 8回
- この商品を含むブログ (4件) を見る
前回の続き
17章 Shift_JIS
日本の文字セットのデファクトスタンダートして長く君臨して来た。 以下の文字集合をサポートする
- JIS X 0201:1997(JISローマ字+半角カナ)
- JIS X 0208:1997
構造としては、1バイト文字と2バイト文字の可変長ステートレスな文字コード系。 JIS漢字コード(JIS X 0208をGLに呼び出したコード)の1バイト目を、半角英数字(JIS X 0201ローマ字)と半角カナ(JIS X 0201カタカナ)を避ける位置にうまくシフトさせて配置したもの。
C1制御文字が使えないが、ESC+0x40-0x5fの2バイトで代用する。また、JIS X 0212はShift_JISが出来たときには存在しなかったため利用できない。
領域
- 0x00-0x1f: C0制御文字
- 0x20-0x7f: 半角英数字(JIS X 0201 ローマ字)
- 0x80: 未使用
- 0x81-0x9f: JIS基本漢字1バイト目(JIS X 0208 1〜62区漢字)
- 0xa0: 未使用
- 0xa1-0xdf: 半角カナ(JIS X 0201 カタカナ)
- 0xe0-0xef: JIS基本漢字1バイト目(JIS X 0208 63〜94区漢字)
- 0xf0-0xff: 未使用
文字種判定
先頭から1バイトずつ辿るとき、以下のように文字種を判定できる
- 0x00-0x1fならC0制御文字
- 0x20-0x7fなら半角英数字
- 0xa0-0xdfなら半角カナ
- 0x81-0x9f,0xe0-0xefなら次のバイトとあわせてJIS基本漢字
0x5c問題
JIS基本漢字の2バイト目に0x5cが含まれるため、¥をエスケープ文字とするC言語等で、プログラマーを悩ませてきた。処理系が賢くなった今となってはどうでもよい話。
Shift_JIS0213
JIS X 0213の附属書1には、JIS X 0213を搭載した、Shift_JISに互換性のある Shift_JIS0213が参考掲載されている。Shift_JISの 0xf0-0xfcに、JIS X 0213漢字第2面の1バイト目(第4水準漢字)が割り当てられている。
従来の機種依存文字の範囲が潰されているため、各メーカーの対応は消極的。Microsoftは、JIS X 0213への対応をUnicodeで行っている。
18章 機種依存文字
Microsoft Windowsでは、公的な文字セットを勝手に拡張して使っている。これは、対象とする国に分けてCPnnn(コードページ)という番号で管理されている。
- ASCII - CP437 アメリカ/カナダ
- ISO-8859-1 - CP1252 西ヨーロッパ
- Shift_JIS - CP932 日本
このように、メーカーが拡張したコードのことを、ベンダーコードと呼ぶ。
MS,Apple,IBM,Adobe,Fujitsu,Xerox等々、色々な会社がベンダーコードを持っている。 この、ベンダーコードには存在するが、基本となる文字コードには存在しない文字を、機種依存文字と呼ぶ。
CP437
アメリカやカナダで使われたコードページ。元々はIBM-PCのために生まれた文字セット。 0x00-0x1f,0x7fの32個のコードポイントには、2通りのグリフが割り当てられている。 一つはこれまで通りのC0制御文字、もう一つは、キャラクタモードで動かしたときに表示されるもの。 キャラクタモードなんて現代ではもう使われていないので、あまり気にしなくてよさげ。
CP1252
今でも欧米でよく使われる。ISO 8859-1を元にしたもので、0x80-0x9fに西欧特殊文字を設定している。IANA登録名は、Windows-1252。
CP932
日本語用のコードページ。Shift_JISを拡張したもので、IANA登録名はWIndows-31J。 1982年にShift_JISが開発された時に、MicrosftがMS-DOSの日本語コードとして採用。
1993年、WIndows 3.1Jの発売にあたり、文字コードを整理し、NECとIBMが登録していた機種依存文字を再配置してCP932を統一。これがWindows-31Jとなる。
- JIS X 0201とJIS X 0208がベース
- 13区にはNEC特殊文字(丸囲み数字等)。JIS X 0213で追認されたが、CP932とJIS X 0213の13区は完全には同一ではない
- 89-92区にはNEC選定IBM拡張文字。JIS X 0213と異なる内容
- 115-119区にIBM拡張文字。 JIS X 0208のコード範囲(94区)を超える
- JIS X 0208基本漢字、NEC選定IBM拡張文字、IBM拡張文字の間で重複登録(重複符号化)されている文字がある
重複符号化の弊害
ラウンドトリップコンバージョンが保証されない(他の文字コードから変換したあと元の文字コードに戻せる保証がない)ため、Windowsでは以下のロジックで文字の選択を行っている。
- JIS X 0208:1990の登録文字の場合は、これに統一する
- NEC特殊文字とIBM拡張文字が重複する場合は、NEC特殊文字に統一する
- NEC選定IBM拡張文字とIBM拡張文字が重複する場合は、IBM拡張文字に統一する
Apple Macintosh
Macintoshに搭載されたOS。 Mac-Roman(Macintosh Standard Roman Character Set)はISO 8859-1やWIndows-1252と文字レパートリーはほぼ一緒。
日本語に関しては、Shift_JISをベースにしたもの。
- アップル標準システム外字
- 漢字Talk6.0.7互換システム外字
- Windows標準システム外字
OS Xでは、CP932互換のOpenTypeフォントのヒラギノがサポートされている。
EUC-JPファミリー
以下の3つが三すくみの膠着状態。そうこうしている間にUnicodeで解決という事態に落ち着きそう。
- EUC-JP - 本家。補助漢字が使え、重複文字がないが、NEC特殊文字やIBM拡張文字が使えない。
- eucJP-ms - TOGという非営利団体のJVCが策定したもの。補助漢字やNEC特殊文字、NEC選定IBM拡張文字、IBM拡張文字が全て使えるが、重複文字がある。
- CP51932 - MSが作成したもの。NEC特殊文字、NEC選定IBM拡張文字が使え、重複文字がないが、補助漢字が使えない。
長年の王者であるShift_JISと、機種依存文字の問題に関する章が終了。互換性や複数言語への対応といった問題を解決するためにUnicodeへの統一が渇望されたのだと思います。 最近の6.0や7.0の状況は知らないのでなんとも言えませんが、あっちはあっちでぐだぐだな状況なような気がしないでもないのですが…
さて、いよいよ次章は160ページにもわたるUnicodeの章。この章を読む為だけにこの本を買ったと言っても過言じゃないのですが、全670ページの1/4が割かれた超大作なので、頑張って理解しないといけませんね。
次回へ続く