プログラミング超基本 文字コードって何?

  • このエントリーをはてなブックマークに追加

文字コードと言われても何だかわかりませんよね。思いっきりかみ砕いて説明します。なので、物足りなさが残るかもしれませんが--。そこはお許しください。

コンピューターって究極を言えば1と0の並びで全てを理解します。1か0、オンかオフです。ちょっと数学的な話になってごめんなさい。この1か0を表す単位をビットと呼び、8つのビットをひとつにまとめ1バイトと呼んでいます。この1バイトをひとつ、またはいくつか組み合わせて文字を表しています。

半角文字・全角文字

全角文字とは、印刷するときの文字幅が正方形のもので、漢字が代表的です。その横幅が半分のもの(高さは同じ)を半角文字としています。半角の幅に難しい漢字を入れるのは不可能ですよね。アルファベットを母国語で使っている国の方はどうでしょう。A~Zとa~z、あとカンマやピリオドとか記号を入れても難しい表現ってなさそうです。

言語での文字の種類はいくつある?

アルファベットだと100個程度で済みそうです。1バイトもあればアルファベットを母国語としている国は十分です。なぜなら1バイトで表現できる個数は2ビットの8乗、256個だからです。
漢字はどうでしょう。とても256個ではとても足りません。とりあえず、1バイト追加して2バイトで表現したらどうでしょう。これだと65,536個の文字を表現できます。代表的な漢字、JIS第一水準と第二水準の個数が啓6355個なので、余裕で収まります。そこで全角文字=2バイト文字の地図としてシフトJISを作成しました。でも、これって通用するのは日本だけなのです。

世界レベルでは

世界を見渡してみましょう。お近くのハングル文字(韓国)や簡体字(中国)を合わせたらどうなります?調べていませんけど、65,536個で収まるのでしょうか。いやいや、テレビで見かけるアラビア文字とかインド文字を加えたら足りなくなる?

それぞれの文字で地図を作るとコンピュータ上では同じですが見た目が違うという現象が起きます。間違いの基になるので全世界で共通する全角文字の地図を作りましょうということになります。2バイト文字と表現しないのは、多くの文字を登録するには「1つの文字を表すのに3バイト使用する」という2バイトを超える文字が発生したためです。その2バイト列を超えて表現する文字の対応表がUNICODEです。 全世界的にまとめた文字コードがUNICODEとなるわけです。

UNICODEにもいろいろある?

「全世界で共通の文字コードを作りましょう」という方針について理解はできたもののコンピューターとのやり取りはどうする?このやり取りの定義を符号化形式と言います。この符号化形式がいくつも存在します。なのでUNICODE形式のファイルには先頭にBOM(Byte Order Mark)が付与されています。あらかじめ取り決めができているのであればBOM無しのファイルも存在します。符号化形式でよく使われるものがUTF-8です。他にもいろいろありますが、余計な情報なのでここでは紹介しません。

まとめ

文字コードとは見た目とコンピュータが理解する記号の地図(変換表)である。日本の漢字だけで通用する対応表「シフトJIS」があり、全世界的にはUNICODEという対応表があり、UTF-8という符号化形式がある。Windowsの世界ならシフトJIS とUNICODE=UTF-8とだけ知っていればほぼOKです。

SNSでもご購読できます。