稲枝の押入れ

いなえが適当なことを書いては、しまっておく場所

文字コードまとめ

はじめに

文字コード周りを勉強していて、とりあえず全体を軽く俯瞰したので、今後の学習のために一旦代表的な符号化文字集合と符号化方式等について挙げて簡単に説明をつけてみる。

自分用かつ走り書き(推敲なし)なのでフォーマット等乱れはあるかと思うのでご容赦いただきたい。

また、個人的に重要かと思ったところを拾ったので情報の過不足もあるかと思うがそちらもご容赦いただきたい

間違いもしくは抑えるべき重要な点についての漏れ等があった場合は指摘をいただけるとありがたい。

気が向いたらもう少しきれいにするかもしれない

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

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

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文字を表す固定方式を策定しようとしていた
  • 同じ目的の異なる国際文字コードが並立するのは望ましくないため、統合作業が行われた
  • 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

  • 群00面00のことを基本多言語面(Basic Multilingual Plane = BMP)と呼ぶ
    • BMPはもともとのUnicodeにあたる
    • 使用機会の多い文字の殆どはここに含まれる

SMP

  • 群00面01のことを補助多言語面(Supplementary Multilingual Plane = SMP)と呼ぶ
    • 歴史的な文字
    • 専門分野の記号

SIP

  • 群00面02のことを補助漢字面(Supplementary Ideographic Plane = SIP)と呼ぶ
    • BMPに収まらなかった漢字

面0E

  • 普通の意味の文字ではない特殊用途のメタ文字の様なもの専用の面

JIS X 0221

JIS X 0212

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種類の符号化方式

JIS2004(2004年改正)

  • 例示字形の変更生
  • 表外漢字UCS互換(10文字)の追加

EUC-JP

ISO-2022-JP

  • 7bitの符号化方式
  • ASCII,JIS X 0201ラテン文字,JIS X 0208を使用
  • RFC1468として仕様公開
  • 第8bitが1のコード範囲は全く使用しない
  • エスケープシーケンスによるGLの文字集合切り替えを使う
    • 状態を持つ符号化方式
    • 初期はASCII

Shift_JIS

UTF-16

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バイトを用いる