社内SEになりました

社内SEは本当に楽なのか?ユーザー系IT企業とSierとの違いは?これからIT企業への就職や転職を考えている人むけに、ユーザー系IT企業から社内SEに40代で転職した筆者がITエンジニアの仕事内容やプロジェクト管理のノウハウ等をご紹介。

文字コード第一回:概要

文字コードって、とっても難しいです。

そんな文字コードを可能な限りわかりやすく解説します。

1.文字コードって何?

情報システムで扱う「文字」は、「符号化文字集合(キャラクタセット)」「文字符号化方式エンコーディング)」「フォント」の3つで構成されます。

「符号化文字集合」は、言葉どおり文字の集合です。ASCⅡやUnicodeJIS2004JIS X 0213)などがこれにあたります。

文字符号化方式」は、コンピューターで符号化文字集合を扱うためのコード化のルールです。UTF-8やShift-JIS、EUC-JPなどがこれにあたります。

「フォント」は、一番馴染みがあると思いますが、明朝体やゴシック体、Arialなどがこれにあたります。

f:id:SystemEngineers:20210531184721p:plain

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 0208JIS X 0213には、JIS X 0201に収録されている文字が含まれていません。乱暴に言うと、JIS X 0201は半角文字、JIS X 0208JIS 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 0201JIS X 0208を同時に利用できるようにしたものはWindowsで有名なShift-JISです。

Unicodeはちょっと特殊で、単一の符号化文字集合で全ての文字を表現できるので、他の符号化文字集合との組み合わせは必要ありません。

ただUnicodeは可変長のため、コンピュータで扱いやすい固定長のコードに変換する方式が登場しました。

UTF-16は、Unicodeを16ビット(2バイト)の固定長コードに変換したもので、JavaC#などの文字列処理で利用されています。

UTF-8は、UnicodeをASCⅡと互換性のある最大48ビット(6バイト)の可変長コードに変換したもので、ASCⅡと互換性があることからLinuxWebブラウザー、Pythonなど広く利用されています。

4.フォント

ここでは、「字種」「字体」「字形」「書体」を区別せず「フォント」と呼びますが、これらは厳密には異なります。

「字種」は、文字の概念です。符号化文字集合に相当します。

「字体」は、文字の骨組みです。「亀」という字を100人の人が手書きすると、100とおりの「亀」になりますが、でも「亀」と認識できます。この「亀」と認識できる部分が字体です。

「字形」は、この字体を目で見えるようにしたものです。100とおりの「亀」は、すべて「字形」が異なります。

「書体」は、この字形の概念(様式)を抜き出したもので、同じ様式で作られた文字の集まりです。ゴシック体や明朝体などが書体です。

「吉」と「𠮷」、「斉」と「斎」は、字種と書体は同じで、字体と字形が異なります。

「亀」と「」、「鶴」と「」は、字種と字体は同じで、字形と書体が異なります。

「未」と「末」、「矢」と「失」は、書体は同じで、字種と字体、字形が異なります。

 【振り返り】

第一回は、文字コードの概要でした。第二回は、符号化文字集合です。

第一回:概要
第二回:符号化文字集合
第三回:文字符号化方式(前編)
第四回:文字符号化方式(後編)
第五回:サロゲートペア
第六回:IVS
第七回:文字コードの歴史
第八回:文字化け