- はじめに
- ASCII
- ISO/IEC 646
- JIS X 0201
- ISO/IEC 2022
- JIS X 0208
- ISO/IEC 8859
- ISO/IEC 10646(UCS)およびUnicode
- JIS X 0221
- JIS X 0212
- JIS X 0213
- EUC-JP
- ISO-2022-JP
- Shift_JIS
- UTF-16
- UTF-32
- UTF-8
はじめに
文字コード周りを勉強していて、とりあえず全体を軽く俯瞰したので、今後の学習のために一旦代表的な符号化文字集合と符号化方式等について挙げて簡単に説明をつけてみる。
自分用かつ走り書き(推敲なし)なのでフォーマット等乱れはあるかと思うのでご容赦いただきたい。
また、個人的に重要かと思ったところを拾ったので情報の過不足もあるかと思うがそちらもご容赦いただきたい
間違いもしくは抑えるべき重要な点についての漏れ等があった場合は指摘をいただけるとありがたい。
気が向いたらもう少しきれいにするかもしれない
ASCII
ISO/IEC 646
- 符号化文字集合を定めるための規格
- Information technology — ISO 7-bit coded character set for information interchange
- ASCIIの変種
- つまり、7bitの1byteコード
- ASCIIをベースに、各国の都合に応じて文字を変更してもいい符号位置を定めている
- ある符号に対して、各国で自由に文字を定められるところが10箇所ある。
- ある符号に対して、2種類から文字を選べるところが2箇所ある
ISO/IEC 646 International Reference Version
- 符号化文字集合(の例?)
- ISO/IEC 646国際基準版
- ASCIIと同一(規格化当初は少し違った)
JIS X 0201
- 符号化文字集合
- 「7ビット及び8ビットの情報交換用符号化文字集合」
- 日本版のISO/IEC 646
- ASCIIのバックスラッシュ部分が円記号に、チルダがオーバーラインになっている
- ラテン文字集合と片仮名集合を定めている
- この片仮名集合が所謂「半角片仮名」を定めている
- 8bitの1byteコード(この意味でISO/IEC 646の日本版、といっていいのかわからない。勿論ISO/IEC 646を満たしているのだろうけど)
- 符号化方式
- 7ビット符号
- 8ビット符号
ISO/IEC 2022
- 様々な文字コードに基礎を提供する役割
- ISO/IEC 646では複数の言語を同時に扱うことが出来なかった為、それに対応するために策定
- ASCIIを拡張するしくみ
- 8ビットコードや2バイトコードが可能に
- 2バイト文字集合の場合94*94=8836の符号位置がある
- 8bit
- CL,GL,CR,GRの概念の導入
- 0x00 ~ 0x1F : CL
- 0x20 ~ 0x7F : CR
- 0x80 ~ 0x9F : GL
- 0xA0 ~ 0xFF : GR
JIS X 0208
- 2byte符号化文字集合
- 漢字、平仮名、片仮名、ラテン文字、ギリシャ文字、キリル文字、算用数字、各種記号等を含む
- ISO/IEC 2022に準拠した構造
- 初版は78JIS等ともよばれる
- 符号化方式(規格本体に6種類、附属書に2種類)
- EUC-JP
- ISO-2022-JP
- Shift_JIS
- 漢字用7bit符号
- 漢字用8bit符号
83JIS(1983年改定)
- 非漢字の追加
- 漢字の字体変更(簡略化)
- 入れ替え
- 漢字の追加
90JIS(1990年改正)
- 漢字の追加(2文字)
- 微妙な字体差
97JIS(1997年改正)
- 規格の明確化
- 包摂基準の明示
- 漢字の典拠の調査(幽霊漢字対策)
- 符号化方式
ISO/IEC 8859
- 複数の符号化文字集合を定義した規格
- ISO/IEC 2022に整合的な構造
- 8bitの1byteコード
- 合計15のパートから成る
- Part 1: Latin alphabet No. 1
- Part 2: Latin alphabet No. 2
- Part 3: Latin alphabet No. 3
- Part 4: Latin alphabet No. 4
- Part 5: Latin/ Cyrillic alphabet
- Part 6: Latin/ Arabic alphabet
- Part 7: Latin/ Greek alphabet
- Part 8: Latin/ Hebrew alphabet
- Part 9: Latin alphabet No. 5
- Part 10: Latin alphabet No. 6
- Part 11: Latin/ Thai alphabet
- Part 13: Latin alphabet No. 7
- Part 14: Latin alphabet No. 8 (Celtic)
- Part 15: Latin alphabet No. 9
- Part 16: Latin alphabet No. 10
- GLはASCII、GRにはそれぞれのパートで各地域に応じた文字集合を割り当てる
ISO/IEC 8859-1(Latin-1)
- 符号化文字集合
- 「 Information technology — 8-bit single-byte coded graphic character sets — Part 1: Latin alphabet No. 1」
- ISO/IEC 8859の1つのバージョン
- つまり8bitの1byteコード
- 西ヨーロッパ各国の言語を表すことが出来る
- 現在も欧米を中心に使われている
- NBSP,SHY等を含む
ISO/IEC 8859-2(Latin-2)
- 「 Information technology — 8-bit single-byte coded graphic character sets — Part 2: Latin alphabet No. 2」
- ISO/IEC 8859の1つのバージョン
- つまり8bitの1byteコード
- 中央ヨーロッパ・東ヨーロッパ各国の言語を表すことが出来る
- Latin-1と共通する文字は同じ符号位置に配置されている
ISO/IEC 10646(UCS)およびUnicode
- ISOは当初は4byteで1文字を表す固定方式を予定
- 一方、業界団体がUnicodeという2byteで1文字を表す固定方式を策定しようとしていた
- 同じ目的の異なる国際文字コードが並立するのは望ましくないため、統合作業が行われた
- 以降、UnicodeとISO/IEC 10646は別規格でありながら同一の文字コード表になるように改定されている
- ISO/IEC 10646が定義する文字コードをUCSと呼ぶことがある
- 4byteと言う建前は残しつつ、Unicodeに合わせて下位2byteにすべての文字を配置した
- しかし、2byteには文字は入り切らなくなった
- 互換性を保ちながら2byteから4byteに拡張する方法が考えられた
- 結合文字の使用を可能にしてある
- 1つの文字が複数の符号化表現を持ちうるため、正規化も用意
- 統合漢字のもとになったいずれかの規格で区別されている文字の違いは統合漢字でも区別する(原規格分離規則 source separation rule)
- 互換漢字
UCS-4
- 符号化文字集合
- 4byteコード
- 各バイトが群・面・区・点に対応
- 231の符号位置がある
- 文字の符号化のためのコード空間としては十分すぎるほど広い
- ISO/IEC 10646の2011年版以降、群00の面00から17面分以外(UTF-16で表すことが出来ない面)は削除された
- 実質Unicodeの全ての
UCS-2
- 符号化文字集合
- 2byteコード
- UCS-4の群00面00に当たる
- とはいえ厳密にはbyte数が違うので符号も違う
BMP
SMP
- 群00面01のことを補助多言語面(Supplementary Multilingual Plane = SMP)と呼ぶ
- 歴史的な文字
- 専門分野の記号
SIP
面0E
JIS X 0221
- ISO/IEC 10646と完全に一致するように作られているJIS
- 「国際符号化文字集合(UCS)」
JIS X 0212
- 符号化文字集合
- 2byteコード
- 補助漢字
- 非漢字
- JIS X 0208との組み合わせて用いることが前提に設計
- JIS X 0208にない文字を選定
- 単独で用いる事自体は出来る
- 符号化方式は特に定められていない
- EUC-JP
- ISO-2022-JP-1
JIS X 0213
- 符号化文字集合
- 2byteコード
- JIS X 0208の上位互換
- JIS X 0208を包含しているとみなせる
- よってJIS X 0208と併用する必要はなくこれ単体で足る
- JIS X 0208の反省を生かして、現代日本で使われている文字を符号化することを目指した
- 「7ビット及び8ビットの2バイト情報交換用符号化拡張漢字集合」
- 多くの文字が収録された(11233文字)
- 漢字第3・第4水準
- ISO/ISC 8859の第1部と第2部の文字をすべて含む
- ASCII互換のための文字(一部JIS X 0208にはなかった)
- アイヌ語表記用片仮名
- 漢字のへんやつくり
- JIS X 0208の1983改正における字体変更の変更前の文字の追加
- 初版はJIS2000などとも呼ばれる
- 合計9種類の符号化方式
- 6つは97JISに定義されていたものと同名称
- 附属書に3つ定義
- Shift_JIS-2004(Shift_JIS)
- ISO-2022-JP-2004
- EUC-JIS-2004
JIS2004(2004年改正)
- 例示字形の変更生
- 表外漢字UCS互換(10文字)の追加
EUC-JP
- 8bitの符号化方式
- ASCII,JIS X 0208,JIS X 0201片仮名集合,JIS X 0212を使用
- ただしJIS X 0201片仮名とJIS X 0212補助漢字はオプション
- 0xA1から0xFEまでの値は2バイト並べることでJIS X 0208を表現
- 0x7F以下はASCII
- 2バイトコードは必ず第8ビットがたった状態で表される
- シングルシフトによる文字集合切り替え
- 制御文字SS2(0x8E)の直後1文字はJIS X 0201片仮名を表現
- 制御文字SS3(0x8E)の直後1文字はJIS X 0212を表現
- シングルシフトが終わるとJIS X 0208に戻る
- 重複符号化問題(原則ASCIIを使用)
ISO-2022-JP
- 7bitの符号化方式
- ASCII,JIS X 0201ラテン文字,JIS X 0208を使用
- RFC1468として仕様公開
- 第8bitが1のコード範囲は全く使用しない
- エスケープシーケンスによるGLの文字集合切り替えを使う
- 状態を持つ符号化方式
- 初期はASCII
Shift_JIS
- JIS X 0201の8ビット符号の隙間にJIS X 0208を変換して押し込んだ符号化方式
- 2バイトコードの場合、第1バイトは0x81~0x9Fか0xE0~0xEF、第2バイトは0x40~0x7Eか0x80~0xFC
- JIS X 0201互換
- 重複符号化
- JIS X 0201ラテン文字とJIS X 0208の両方にある->JIS X 0201を使用
- JIS X 0201片仮名とJIS X 0208の両方にある->JIS X 0208を使用
- 機種依存文字付き変種の存在
UTF-16
- 16ビットの符号単位を使う符号化方式
- もともとのUnicodeの直系とも言える方式
- ISO/IEC 10646で定義
- BMP外の文字についてはサロゲートペアを用いて表す
- UTF-16BE(ビッグエンディアン)とUTF-16LE(リトルエンディアン)がある
- エンディアンが明示されていない場合、BOMありの場合はこれで識別可
- BOMはU+FEFFを使う
UTF-32
- 各符号位置を4バイト固定幅で表現する符号化方式
- UCS-4と実質同一になる
- UTF-32BE(ビッグエンディアン)とUTF-32LE(リトルエンディアン)がある
- UTF-16と同様にBOMを使用可能
- BOMはU+FEFFを使う
- ただし、符号単位が4バイトなので注意
UTF-8
- Unicode,ISO/IEC 10646で定義
- RFC3629として閲覧可能
- 8ビット単位の符号化方式
- 1つの符号位置の表現に1~4バイトを使用
- かつては最大6バイト
- ASCII互換
- 冗長な表現が可能なため、最も短い符号化が必要
- 本来BOMは関係がないはずだが、BOM付きがある
- UTF-8のデータであることの印として使われる
- BOMはEF BB BF
CESU-8
- UTF-16で表現可能なBMP外の符号位置を直接UTF-8で符号化しない方式
- UTF016のサロゲートペアの上位下位それぞれの符号位置をUTF-8で符号化してつなげる
- UTF-8であれば4バイトで符号化される部分が6バイトで符号化されたりする
Modified UTF-8
- CESU-8に似た方式
- Javaのクラスファイルで使われているらしい
- U+0000を表すのにC080という2バイトを用いる