文字コードって、とっても難しいです。
そんな文字コードを可能な限りわかりやすく解説します。
1.文字コードって何?
情報システムで扱う「文字」は、「符号化文字集合(キャラクタセット)」「文字符号化方式(エンコーディング)」「フォント」の3つで構成されます。
「符号化文字集合」は、言葉どおり文字の集合です。ASCⅡやUnicode、JIS2004(JIS X 0213)などがこれにあたります。
「文字符号化方式」は、コンピューターで符号化文字集合を扱うためのコード化のルールです。UTF-8やShift-JIS、EUC-JPなどがこれにあたります。
「フォント」は、一番馴染みがあると思いますが、明朝体やゴシック体、Arialなどがこれにあたります。
2.符号化文字集合
最初に作られた文字コードは、ASCⅡです。
1960年代にアメリカの規格として作られました。ASCⅡは7ビットのコードで、2の7乗=128文字を表現できます。
このASCⅡをもとにして日本用に作られた符号化文字集合が、JIS X 0201です。ASCⅡとの違いは、ASCⅡの「\」(バックスラッシュ)が「¥」になり、「チルダ」が「オーバーライン」になりました。
その後、8ビット2つで1文字を表現する2バイトコードが誕生します。
JIS X 0208が日本語版の2バイト文字集合です。最大で8,836の文字を表現でき、常用漢字が1,945文字なので、かなり大量の文字を表現できることになります。
このJIS X 0208の対象になっている文字は、いわゆるJISの第一水準、第二水準と呼ばれる文字で、1997年版のJIS X 0208では6,879文字が収録されています。
その後、JISの第三水準、第四水準の文字を取り込むことになりますが、JIS X 0208の最大文字数8,836では足りなくなり、JIS X 0213が誕生し今に至ります。JIS X 0213では、11,233文字が収録されています。
ここでちょっと問題が出ます。このJIS X 0208やJIS X 0213には、JIS X 0201に収録されている文字が含まれていません。乱暴に言うと、JIS X 0201は半角文字、JIS X 0208やJIS X 0213は全角文字です。
そのため半角と全角で、使用する符号化文字集合を切り替えなければいけないという、ちょっと面倒なことが生じていました。
そこで誕生したのがUnicodeです。Unicodeは半角と全角の両方を収録しているだけでなく、世界中の文字を収録しています。Unicodeは可変長の文字コードですが、現在のUnicodeは最大で21ビット=2,097,152文字まで収録することができます。
3.文字符号化方式
符号化文字集合は、そのままだとコンピューターで扱うことが困難です。
例えば半角はJIS X 0201、全角はJIS X 0208を使用しようと思うとき、「1円」を文字コードで表すと、「1」はJIS X 0201で「31」、「円」はJIS X 0208で「315F」です。これを繋げると「31315F」となります。
ここで「3131」はJIS X 0208で「臼」、「5F」はJIS X 0201で「_」となるため、「11_」の文字コードは「31315F」、「臼_」の文字コードは「31315F」で、「31315F」の文字コードは「1円」でもあり、「11_」でもあり、「臼_」でもあるという状態になってしまいます。
この問題を解決するのが、文字符号化方式です。
符号化文字集合をコンピューターで扱いやすいコードに変換することで、文字を一意に表現することができるようになります。
代表的なものでは、ASCⅡとJIS X 0208を同時に利用できるようにしたものがEUC-JPで、Unix系のOSで利用されています。
JIS X 0201とJIS X 0208を同時に利用できるようにしたものはWindowsで有名なShift-JISです。
Unicodeはちょっと特殊で、単一の符号化文字集合で全ての文字を表現できるので、他の符号化文字集合との組み合わせは必要ありません。
ただUnicodeは可変長のため、コンピュータで扱いやすい固定長のコードに変換する方式が登場しました。
UTF-16は、Unicodeを16ビット(2バイト)の固定長コードに変換したもので、JavaやC#などの文字列処理で利用されています。
UTF-8は、UnicodeをASCⅡと互換性のある最大48ビット(6バイト)の可変長コードに変換したもので、ASCⅡと互換性があることからLinuxやWebブラウザー、Pythonなど広く利用されています。
4.フォント
ここでは、「字種」「字体」「字形」「書体」を区別せず「フォント」と呼びますが、これらは厳密には異なります。
「字種」は、文字の概念です。符号化文字集合に相当します。
「字体」は、文字の骨組みです。「亀」という字を100人の人が手書きすると、100とおりの「亀」になりますが、でも「亀」と認識できます。この「亀」と認識できる部分が字体です。
「字形」は、この字体を目で見えるようにしたものです。100とおりの「亀」は、すべて「字形」が異なります。
「書体」は、この字形の概念(様式)を抜き出したもので、同じ様式で作られた文字の集まりです。ゴシック体や明朝体などが書体です。
「吉」と「𠮷」、「斉」と「斎」は、字種と書体は同じで、字体と字形が異なります。
「亀」と「亀」、「鶴」と「鶴」は、字種と字体は同じで、字形と書体が異なります。
「未」と「末」、「矢」と「失」は、書体は同じで、字種と字体、字形が異なります。
【振り返り】
第一回は、文字コードの概要でした。第二回は、符号化文字集合です。
第一回:概要
第二回:符号化文字集合
第三回:文字符号化方式(前編)
第四回:文字符号化方式(後編)
第五回:サロゲートペア
第六回:IVS
第七回:文字コードの歴史
第八回:文字化け