文字の種類
 文字は、JISローマ字、JISカナ、JIS漢字、JIS補助漢字の4種類に分類され、JIS規格によって決められています。   この他に、制御コードと呼ばれるデータがあり、文字と同様に扱っています。 
 また漢字は、94×94の領域に1字づつ配置されています。   この横の行を区、縦の列を点と呼び、区点番号で表すこともあります。
| JIS X 0211 | JIS制御コード | 
| JIS X 0201 | JISローマ字 (ASCII) | 
| JIS X 0201 | JISカナ(半角カナ) | 
| JIS X 0208 | JIS漢字 | 
| JIS X 0212 | JIS補助漢字 | 
 ホームページや、メールなどで、以下の文字列を見ることが多いと思います。
  Content-Type:   text/plain; charset=ISO-2022-JP
 これは、テキストの文字コードが何で記述されているかを示すものです。 
 ISO-2022-JPは、RFC-1468で定義されていて、インターネットでは標準的な日本語文字セットとして扱われています。   RFC-1468では、JISカナ、JIS補助漢字は、除外されています。 このことが、いわゆる半角カナが使えないサイトが多い理由です。   しかし、実際のデータとしては、使われている場合がありますので、入力データとしては対応しておくとトラブルが発生しません。   半角カナを全角カナに変換することは簡単ですので、対応しておくと良いでしょう。 
 charsetには、他にも、以下のような指定があります。
| charset=ISO-8859-1 | 米国やヨーロッパで使われている文字セット | 
| charset=ISO-2022-JP | 半角カナを除くJISコードの日本語文字セット 実際には、半角カナが入っている場合もある | 
| charset=Shift_JIS | SJISコードの日本語文字セット | 
| charset=EUC-JP | EUCコードの日本語文字セット | 
| charset=UTF-8 | Unicode(UTF-8)の日本語文字セット | 
| charset=UTF-16 | Unicode(UTF-16)の日本語文字セット | 
文字コードの種類
 現在、インターネットの世界で使用されている文字コードは、JISコード、SJIS(Shift-JIS)コード、EUCコード、Unicodeの4つと考えてもほとんど問題はないと思います。 
 以下に、よく利用されている4つのコードについての簡単な説明をします。
●JISコード
 インターネットで、最も標準的な文字コードです。   8ビットJISもありますが、ISO-2022-JPなどで使われているのは7ビットコードです。   7ビットコードでは最上位ビットを使用しないため、00-7Fまでの文字コードしか存在しません。 
 JISコードでは、以下のエスケープシーケンスにより、文字の種類を決めます。
| エスケープシーケンス | 1バイト目 | 2バイト目 | 文字の種類 | |
|---|---|---|---|---|
| 00-1F,7F | 制御コード | |||
| 1B 28 42 | ESC ( B | 20-7E | ASCII | |
| 1B 28 4A | ESC ( J | 20-7E | JISローマ字 | |
| 1B 28 49 | ESC ( I | 21-5F | JISカナ(半角カナ) | |
| 1B 24 40 | ESC $ @ | 21-7E | 21-7E | 旧JIS漢字 (1978) | 
| 1B 24 42 | ESC $ B | 21-7E | 21-7E | 新JIS漢字 (1983/1990) | 
| 1B 24 44 | ESC $ D | 21-7E | 21-7E | JIS補助漢字 | 
 JISローマ字は、ASCIIのバックスラッシュが¥になった文字集合です。 
 JIS漢字には、1978年制定の旧JISと、1983年/1990年制定の新JISがあります。   この他、2000年制定のJIS第3水準、第4水準もありますが、ほとんど使われていないため、このページの最後に紹介する程度にします。
●シフトJISコード
 シフトJISコードは、SJISとも呼び、Microsoft社が決めたコードでWindows95やMS-DOSやMacなどで使用されています。   シフトJISコードでは、JIS補助漢字は表現できません。 
 SJISコードでは、エスケープシーケンスを使用しません。   また、SJISコードでは半角カナを 1バイトで扱えるため、表示桁数と内部バイト数が一致するという特徴があります。   ただし、第1バイトは必ず最上位ビットが立っていますが、第2バイトは立っていないこともあるので、プログラムをする場合は、注意しなければなりません。   特に、逆方向文字列検索時は、要注意です。 
 また、2バイト文字の中に"\"(0x5C)を含むデータが存在するため、文字列がメタ処理されてしまい、文字化けする可能性があります。
| 1バイト目 | 2バイト目 | 文字の種類 | 
|---|---|---|
| 00-1F, 7F | 制御コード | |
| 20-7E | JISローマ字(ASCII) | |
| A1-DF | JISカナ(半角カナ) | |
| 81-9F E0-EF | 40-7E 80-FC | JIS漢字 | 
●EUCコード
 Extended   Unix Codeの略で、日本語UNIXで使われているコードです。 
 EUCコードでは、エスケープシーケンスを使用せず、ASCII以外の文字は、JISコードの上位ビットを立てることにより識別しています。 
 シフトJISと異なり、JISカナ(半角カナ)は、表示桁数は1桁ですが、内部のバイト数は2バイトとなります。   そのため、JISカナ(半角カナ)に対応できていないプログラムが多いので、注意する必要があります。   インターネットで、JISカナ(半角カナ)が使えない理由もここにあり、UNIXから普及したための制限です。 
 JIS補助漢字の場合は、内部のバイト数は3バイトになります。
| 1バイト目 | 2バイト目 | 3バイト目 | 文字の種類 | 
|---|---|---|---|
| 00-1F, 7F | 制御コード | ||
| 20-7E | JISローマ字(ASCII) | ||
| 8E | A1-DF | JISカナ(半角カナ) | |
| A1-FE | A1-FE | JIS漢字 | |
| 8F | A1-FE | A1-FE | JIS補助漢字 | 
●Unicode(UCS-2)
Unicode(ユニコード)は、ユニコード・コンソーシアムによって制定された文字コードです。 文字を2バイト、または4バイトで表し、世界中の文字を表現しようとしています。 Unicodeは、ISO 10646の中で、UCS-2(BMP)として採用されています。
 UCSは、Universal   multiple-octet coded Character Setの略で、ISO 10646で制定されている世界統一文字コード規格です。   UCSには、2バイト(オクテット)で表すUCS-2と、4バイトで表すUCS-4があります。   UCS-4では、4バイトを群(Group)、面(Plane)、区(Row)、点(Cell)で表しますが、ほとんど使われていません。   このUCS-4の0群0面を基本多言語面(BMP:Basic Multilingual Plane)と呼びます。 
 UCS-2は、BMPの上位の2バイトを省略した文字コードのことで、Unicodeと同一の仕様となっています。
 Unicode(UCS-2)では、A,I,O,Rの4つの領域に分かれています。 
 日本語のJIS X 0208およびJIS X   0212は、CJK統合漢字として格納されています。   CJK統合漢字とは、中国(China)、日本(Japan)、韓国(Korea)の似ている漢字を同じ文字コードに割り当てたものです。
| 領域名 | 文字コード | 内容 | 
|---|---|---|
| A領域 | 00-4D | Alphabet領域のことで、アルファベットなどの表意文字を格納する領域 | 
| I領域 | 4E-9F | Ideograph領域のことで、CJK統合漢字などの表意文字を格納する領域 | 
| O領域 | A0-DF | Open領域のことで、将来の拡張ための予備領域 0xD7-0xDFは、サロゲート領域で、UCS-4の1面から16面の拡張用 | 
| R領域 | E0-FF | Restricted領域のことで、PUAなどの限定使用領域 PUAとは、Private Use Areaの略で、外字などを格納する領域のこと | 
 JavaやXMLは、基本コードとして、Unicodeを採用しています。   また、WindowsNTやWindows98やWindows2000も、Unicodeを採用しています。 
 従って、今後は、Unicode化が進んでいくでしょう。
UTF-8のエンコード方法
 UTF-8は、UnicodeとASCIIコードを混在させるための規格です。Unicodeでは、0x0000-0x007Fの文字コードは、ASCIIコードの0x00-0x7Fと同じとなっていることを利用して変換します。
 UTF-8では、ASCIIコードは、1バイトで表しますが、0x0800から0xFFFFまでのマルチバイト文字は、3バイトで表します。
 UTF-8では、各文字の先頭ビットにより、文字の種類を簡単に判定できます。
- 1ビットめの値
- 0:制御コード、ASCII文字
- 1:マルチバイト文字
- マルチバイト文字の2ビットめの値
- 0:先頭文字以外
- 1:先頭文字
- マルチバイト文字の先頭文字の3ビットめの値
- 0:2バイト文字(0x0080-0x07FF)
- 1:3バイト文字以上(0x0800-0x0010FFFF)
- 3バイト以上のマルチバイト文字の先頭文字の4ビットめの値
- 0:3バイト文字(0x0800-0xFFFF)
- 1:4バイト文字(0x00010000-0x0010FFFF)
| 1バイト目 | 2バイト目 | 3バイト目 | 4バイト目 | 文字の種類 | 
|---|---|---|---|---|
| 00-7F 0xxxxxxx | 制御コード ASCII文字 | |||
| C0-DF 110xxxxx | 80-BF 10xxxxxx | UCS-2マルチバイト文字 (0x0080-0x07FF) | ||
| E0-EF 1110xxxx | 80-BF 10xxxxxx | 80-BF 10xxxxxx | UCS-2マルチバイト文字 (0x0800-0xFFFF) | |
| F0-F7 11110xxx | 80-BF 10xxxxxx | 80-BF 10xxxxxx | 80-BF 10xxxxxx | UCS-4マルチバイト文字 (0x00010000-0x0010FFFF) | 
※ 上段は16進数、下段は2進数(x のビットは 0 または 1)
UTF-16のエンコード方法
UTF-16は、Unicode(UCS-2)の文字は、そのまま2バイトで表現するUnicodeの標準的なエンコード方法です。 UCS-2のO領域内のサロゲート領域(0xD7-0xDF)を使って、UCS-4の中から、1面から、16面までの文字も表現できます。 文字コードで言うと、0x00000000〜0x0010FFFFの文字が表現できます。
| 1バイト目 | 2バイト目 | 3バイト目 | 文字の種類 | 
|---|---|---|---|
| 00-D7,E0-FF | 00-FF | Unicode(UCS-2)の文字 | |
| D8-DF | 00-FF | 00-FF | UCS-4の第1面から第16面の文字 | 
JIS第3水準、JIS第4水準について
 漢字を第3水準および第4水準まで拡張する規格として、JIS   X 0213があります。 特徴としては、第2面が追加されて、大幅に文字数が増加しました。 
 しかし、外字領域に第3水準や第4水準の文字が割り当てられているため、互換性に問題があります。   また、符号化方法も現状と異なるみたいです。 
 JIS X   0213の主な変更点は以下のとおりです。 Windows標準にもなった、13区のNEC拡張文字も、正式に規格化されたみたいです。
| 第1面 1-12区のJIS X 0208未定義部分に、拡張非漢字を追加 13区に、NEC拡張文字を追加(1-12区と重複するものは未定義) 14-94区のJIS X 0212未定義部分に、第3水準漢字を追加 第2面 JIS X 0212未定義部分に、第4水準漢字を追加 | 
 しかし、世の中がUnicodeに向けて動いているのに、よくわからない規格(企画?)です。 
 ただ、charset=ISO-2022-JP-3となるみたいなので、UTF-8として扱えるでしょう。 
 でも、現状では、charset=ISO-2022-JP-2でさえ、ほとんど普及していません。
 
0 件のコメント:
コメントを投稿