Shift_JISとWindows-31J(CP932)とJIS漢字水準の関係について

アルゴリズム
スポンサーリンク

はじめに

こんにちは!なたでです!

今回は文字コードの話、特に日本語についての話です。皆さん、第1水準、第2水準、拡張文字、Windows-31J(CP932)に入る文字は一体何かとか、自信を持って把握していますでしょうか。今回は、その辺のワードを一度整理して、まとめてみました。

単語の解説

基本用語

文字コード

文字コードには2つの意味がある。文字集合と符号化方式である。

文字集合

JIS X 0208など、文字の集合である。これをどのように記録するかは符号化方式による。

符号化方式

ISO-2022-JP、EUC-JP、Shift_JISなどがある。

コードセット

文字集合と符号化方式をまとめたもの。

常用漢字

学校で習う基本的な漢字。1923年に文字集合が生まれ、1981年の時点での常用漢字は1945文字である。

改定常用漢字

2010年に常用漢字に対して改定を行った。2136文字(既存の5文字を削除、196文字を追加)となる。例えば、嵐、俺、丼、虹、枕、串、脇といった今では目にする漢字が含まれる。

JIS漢字水準

JISで定められた漢字規格でいくつかの水準がある。

フォント

パソコンの画面上に文字集合を表示させるためのデータ。文字集合が対応していも、フォントが用意されていなければ表示はできない。

JIS漢字水準の種類

JIS第1水準漢字

1981年の常用漢字1945種類を含んだ2965種類ある漢字集。JISX 0208に含まれる。使用頻度が高い文字が含まれる。

JIS第2水準漢字

3390種類ある漢字集。JISX 0208に含まれる。異体字、旧字体など使用頻度が低い漢字が含まれる。

JIS第3水準漢字

1259種類ある漢字集。JIS X 0213:2004に含まれる。例えば、人名用漢字許容字体や地名で使用される漢字が追加されている。

JIS第4水準漢字

2436種類ある漢字集。JIS X 0213:2004に含まれる。第3水準以外で、よく利用される文字が追加されている。

文字集合の種類

JIS X 0201

ASCIIコードに、片仮名図形文字集合を加えた文字集合。1969年に制定された。1バイトで表すことができるため、文字幅がASCIIコードと同じ半角になっており、後に半角カタカナになっている。

符号説明
0x00-0x1FASCIIコード(制御文字)
0x20ASCIIコード(空白)
0x21-0x7EASCIIコード(図形文字)

JIS X 0201(ラテン文字用図形文字集合)

0x7FASCIIコード(制御文字)
0xA1-0xDFJIS X 0201(片仮名図形文字集合)
0xE0-0xFEJIS X 0201(未定義)

0x21-0x7EのJIS X 0201(ラテン文字用図形文字集合)は、ASCIIコードの図形文字とほぼ同一。ほぼというのは、以下の2文字だけがASCIIコードと異なっている。

  • 0x5C バックスラッシュ\ が円記号 ¥
  • 0x7E チルダ~がオーバーライン‾

JIS X 0208

6879字の文字集合。1978年にJIS C 6226-1978として作成されてその後改定している。漢字は、常用漢字などが含まれる第1水準と、第2水準を定義し、それぞれ第1水準2,965文字、第2水準3,390文字が収納されている。漢字以外の記号も含まれる。

追加された文字は、区と点で定義されている。1区画は94つの文字が定義されており、JIS X 0208では、1区から94区までを定義している。

それぞれの区には次の文字が入る。

収められている文字
1区~2区特殊文字
3区数字とラテン文字
4区平仮名
5区片仮名
6区ギリシア文字
7区キリル文字
8区罫線素片
9区~15区空き領域
16区~47区JIS第1水準漢字
48区~84区JIS第2水準漢字
85区~94区空き領域

空き領域は、文字は規定されておらず、使用してはいけないとされている。

JIS X 0212

6879字の文字集合。1990年に制定。JIS X 0208とは重複しない、特殊文字21字、アルファベット245字、漢字5801字の合計6067字を定義。

JIS X 0208と、組み合わせて使うJIS補助漢字として制定されたが、文字集合を符号化するためのShift_JISと相性が悪く、普及はしていない。この文字集合の符号化方法としては、EUC-JPなどがある。

JIS X 0208と同様に、区と点の概念があり、IMEパットの文字一覧から、以下のように定義されていることが分かる。

収められている文字
1区空き領域
2区記号
3区~5区空き領域
6区~7区アルファベット
8区空き領域
9区~11区アルファベット
12区~15区空き領域
16区~77区JIS補助漢字
78区~94区空き領域

JIS X 0213

JIS X 0208:1997を拡張した文字集合。JIS第3水準漢字とJIS第4水準漢字の漢字、及び記号等含めて4354字が追加されており、6879+4354=11233字の文字集合となる。漢字以外の文字も含まれる。NEC特殊文字はそのまま採用された。JIS X 0213:2004では、もともとあったフォントの字形を変形しており、同一文字でも見た目が変わる場合がある。

JIS X 0212で符号化が出来ていなかった反省を生かし、Shift_JISでの符号化についても定義している。JIS X 0213の拡張をした符号化として、Shift_JIS-2004、EUC-JIS-2004がある。なお、JIS X 0212の文字集合の漢字の一部は、JIS第3水準漢字とJIS第4水準漢字で再定義された上で取り込まれている。

JIS X 0208:1997を拡張する際に、面という概念を追加。1面は、JIS X 0208で利用していなかった部分に記号と、第3水準漢字を追加。2面は第4水準漢字を追加している。2面に関しては、JIS X 0212で定義した区と被らない箇所を利用している。

追加した漢字は、符号化できず普及しなかったJIS X 0212と被っている漢字がある。

収められている文字
1面1区~10区JIS X 0208の文字α※

※各区の末尾の未使用箇所に記号/平仮名/片仮名を追加

1面9区~11区アルファベット
1面12区~13区特殊記号(NEC特殊文字含む)
1面14区~15区JIS第3水準漢字
1面16区~17区JIS X 0208のJIS第1水準漢字

※17区の未使用部分に第3水準漢字を追加

1面48区~84区JIS X 0208のJIS第2水準漢字

※84区の未使用部分に第3水準漢字を追加

1面85区~94区JIS第3水準漢字
2面1区JIS第4水準漢字
2面2区未定義JIS X 0212で使用済み
2面3区~5区JIS第4水準漢字
2面6区~7区未定義JIS X 0212で使用済み
2面8区JIS第4水準漢字
2面9区〜11区未定義JIS X 0212で使用済み
2面12区~15区JIS第4水準漢字
2面16区~77区未定義JIS X 0212で使用済み
2面78区~94区JIS第4水準漢字

Windows-31J文字集合

WindowsのShift_JISの実装で利用できる文字集合。通常のShift_JISに比べて拡張されているため、別の文字集合と考えた方がよい。

  • JIS X 0208
  • IBM拡張文字
  • NEC選定IBM拡張文字
  • NEC特殊文字
収められている文字
1区~12区JIS X 0208の文字(英数字記号)
9区~12区空き領域
13区NEC特殊文字
14区~15区空き領域
16区~84区JIS X 0208の文字(JIS第1、2水準漢字)
85区~88区空き領域
89区~92区NEC選定IBM拡張文字
93区~94区空き領域
95区~114区JIS C 6226範囲外/未定義
115区〜119区JIS C 6226範囲外/IBM拡張文字
NEC特殊文字

JIS X 0208の範囲内の未定義部分(13区)に独自に追加した記号。CP932で言うと0x8740~0x879Cである。後に制定されたJIS X 0213に流用されている。

IBM拡張文字

Windowsが用意した外字領域(JIS C 6226範囲外)を用いて、IBMが定義(115区〜119区)した文字列。CP932で言うと0xfa40~0xfc4bである。

NEC選定IBM拡張文字

IBM拡張漢字をJIS X 0208の空き領域の範囲内(89区〜92区)にNECが移動させた文字列。CP932で言うと0xed40~0xeefcである。つまり、CP932では、同じ文字がIBMの範囲と、NEC選定部分とで2か所含まれる場合がある。

外字

Windowsでは独自に自由に文字を追加できる外字の領域を用意していた。CP932で言うと0xf040〜0xf9fcである。JIS X 0208の集合範囲外の範囲であるが、後に制定されたJIS X 0213の範囲内でもある。JIS X 0208の1997年における改訂で、今後の互換性を維持するために、この未定義領域に外字を入れることが禁止された。

Unicode

全世界の文字を入れた文字集合である。

外字領域もマッピングされており、Shift_JISの外字0xf040〜0xf9fcは、UnicodeのU+e000〜U+e757と対応する。

符号化方式の種類

ISO-2022-JP(JISコード)

7ビットで表す文字符号化。エスケープシーケンスが入る特徴を持つ。7ビットまでしか利用できないメールなどで利用された。

EUC-JP

UNIXなどで利用されていた文字符号化。Windows-31JのEUC-JP対応版にeucJP-msがある。またShift_JIS-2004のEUC-JP対応版にEUC-JIS-2004がある。

Shift_JIS(SJIS)

ASCIIコードや半角カタカナは1バイト。日本語を含むものは2バイトで表す符号化。1バイト文字は半角文字、2バイト文字は全角文字と呼ばれる。Shift_JISを開発設計者は、JIS X 0201と、JIS X 0208を含めてよいと企図している。

Windows-31J(CP932、Microsoftコードページ932)

Windowsでは、上記のShift_JISの範囲に加えて、IBM拡張文字の範囲、NEC特殊文字の範囲、NEC選定IBM拡張文字の範囲、外字の4種類を含む形でShift_JISで記録しており、これがWindows-31Jである。仕様を決める際に例えば、Shift_JISの文字の範囲と言ったときに、本来のShift_JISの範囲なのか、あるいは独自拡張したWindows-31Jの範囲なのか、使用者には用語の確認が求められる。なおWindowsが当初Shift_JISの範囲にメーカー独自で変更を加えてもいいというCP932が作成され、これに対して拡張を加えたものをWindows-31Jとして登録した経緯となるが、拡張文字を含めた文字含めてCP932と呼ぶ場合もある。

Shift_JIS-2004

JIS X 0213のJIS第3水準漢字とJIS第4水準漢字と追加アルファベット/記号を加えたShift_JIS。

NEC選定IBM拡張文字(0xed40~0xeefc)はJIS第3水準漢字に、IBM拡張文字(0xfa40~0xfc4b)はJIS第4水準漢字に、それぞれバッティングしている。NEC特殊文字(0x8740~0x879c)はそのまま取り込まれている。

Unicode

一般的には符号化方式ではない。しかしWindowsのメモ帳で、文字コードをUnicodeにすると、Unicodeの文字集合で、文字符号化は「UTF-16 LE BOM付き」で保存される。従って、Windowsの世界では、UnicodeはUTF-16 LEを指す場合があるため、これもまた使用者に用語の確認が必要である。Unicodeについては、後述の予定。

まとめ

JIS X 0201では、ASCIIコードと半角カタカナ。そしてJIS X 0208では、常用漢字を含んだ第一水準と、異体字を含んだ第二水準、記号が定められた。

初期のShift_JISでは、JIS X 0201とJIS X 0208を含められると規定された。IBMと、NECは、JIS X 0208に対して足りない文字を独自に拡張した。Windowsでは、Shift_JISにこれらの独自拡張文字を、追加した文字コード、Windows-31Jを定めて利用するようになった。

JIS X 0213:2004では、人名用漢字許容字体や地名で使用される漢字などの第三水準、それ以外でよく利用される漢字の第四水準が制定され、これを含めた符号化Shift_JIS-2004を作成した。Shift_JIS-2004は、本来のShift_JISとは互換性があるが、独自拡張を入れたWindows-31Jとは互換性がない符号化となった。

第三水準と第四水準の中には、IBM拡張文字の文字集合が含まれている。例として、IBM拡張文字の「嵂」は、第四水準の文字として決められた。逆にIBM拡張文字にあるのに、第三水準と第四水準にさえ含まれていない文字、例えば「髙」がある。

このように、IBM拡張文字が対応しているWindows-31Jは、第三水準と第四水準の一部対応という形になるし、逆に第一、第二、第三、第四にも含まれない文字、「髙」などにも対応しているということになる。

文字コード解析ツール

文字コード解析ツールを作りました

リアルタイム文字コード解析ツール

詳細は「日本語の文字コード解析ツールの紹介

参考

コメント

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