(ちょっとメモ)文字コード、文字集合、エンコードについて(1)

最終更新日:2017年12月08日  (初回投稿日:2012年09月06日)

前回の記事([45-2] meta要素の charset属性で文字コードを指定しよう)を書くにあたって、ふだん何気なく使ってる Shift_JISUTF-8 って「総称は何て言うのかな?」と調べました。

これが「文字コード」か「文字エンコード」か、どっちかな? みたいな。
そのうちに「文字集合」という言葉も知って、そもそも「文字はコンピュータでどうやって表示してるのか?」などの深みへ…。
で、あれこれを調べたコトを、今回メモっておきます。

文字はこんなふうにコンピュータで表現されてる

文字をコンピュータで表示する仕組みは、ザッとこんな流れらしい。

  1. まず文字を表に当てはめ、1つ1つの文字に符号を付け、1つのセットにする。
  2. それをコンピュータに分かるように、0と1の組み合わせに置き換える。
    また、複数のセットを組み合わせて使う場合は、符号が重複しないようにセットを切り替えさせる。
  3. この0と1の並びを、コンピュータが文字のカタチに置き換えて表示。

この ↑ 仕組み全体を 文字コード(Character code) と呼ぶようです。

[1] のセットを「符号化文字集合」と言うのだそうです。略して文字集合とも言ってるみたい。(日本語で使ってるのは、ASCII、JIS X 0201、JIS X 0208、JIS X 0212など)

[2] を「文字符号化方式」「character encoding scheme(キャラクター エンコーディング スキーム), CES」といい、「文字エンコード(…エンコーディング)」という概念は、これみたい。

[3] は、分かりやすいと思って私が勝手に分けたのですが、そもそも [1] [2] に含まれるっぽい。

[1] を文字コードと言っているように感じたり、[1] と [2] をひっくるめて「符号化表現 = character set(キャラクタセット)」と言ってる資料もあったり…。名称がハッキリわかりませんでした。

色々読んだ末、達した結論は、
それぞれの文字コードを作る各機関・団体によって「定義の仕方」が違うから、「何々はコレ」という決定的な総称としての呼び方はない(無理)ということみたい。
ただ、「Shift_JIS」や「UTF-8」を総称で何と言うか なら、「文字コード」と呼ぶのが正解に近いのかな?と思い、前回のタイトルには「文字コード」という名称を使いました。

でも、「Shift_JIS」と「UTF-8 」だけなら「文字エンコード(符号化方式)」でイイんだ思う。
ASCII などを、同じカテゴリーで書こうとしたのにムリがあったようです。
なるべく簡単に書きたい…と思ったが、そうは行かなかった、ということ。

コンピュータの創世記からの「文字」の取り扱いについて、なぞって行くと、何となく分かってきた。それを以下にメモっていきます。

コンピュータは 0 か 1 の2進数で信号を送ってる

「え? そこから!?」的な話ですが。

コンピュータは 2進法 の世界。0か1しか無いヤツ。
この 0 や 1 も、ヒト用の数字。コンピュータにとっては「on」か「off」

電圧の強弱で、オンで1、オフで0って信号を送ってるそうです。ものっすごい速度で。
昔々、この方式が最もミスが出にくくて良かったので、こうなったんだそうです。
で、文字を表現するのも、この 0 か 1(off か on)の組み合わせで 信号を送ってる。

ちなみに、10進法だと0から始まって9まで1桁、次は10で2桁になりますね。
2進法だと、0から始まって次は1なのは同じですが、その次は10。いきなり。
2という概念が無いので、1+1=10。2桁目に上がっていきます
その次は11、次は100、101、110、111、1000、1001…と続きます。

他にコンピュータでよく使うのに、16進法もあります。
少ない桁数でたくさんの数を表せるので便利。ウェブ上の色指定で#000000なんて使いますね。あれは16進法の表示です。
16進数での色指定の詳細は[14-4] 色指定について(16進数, 色名, 10進数, HSL, accessibility)をご覧ください。

最小単位は1ビット、それを複数にしたのが1バイト

この「0」か「1」の最小の信号を 1ビット(1bit)と呼ぶ。
「bit」は「binary digit(バイナリ ディジット)」の略。
binary は2進数のこと。digit は1桁のこと。まんま「2進数の1桁」ってことで、わかりやすい。
ちなみに、この digit から digital(デジタル)という言葉が生まれたそうです。

1bitだと、2進数の1桁だけ。0 か 1 の 2通りしか表現できない。
で、bitを複数にして(桁数を増やして)1単位にしたのが「バイト(byte)」です。

このバイト、ずっと「1byte = 8bit」だと思ってたんですが 1byte = 7bit もありだそうです! 後述の「ASCII(アスキー)」という文字コードが 7bit だって。

ちなみに、8ビット限定で 1単位にしたい場合のために「octet(オクテット)」という単位もあるそうです。1octet = 8bit です。「octo」はラテン語で「8」。

音階で1オクターブ(octave)とか、蛸はオクトパス(octopus)と言いますよね。8本足だから。
「October」は、古代ローマの8番目の月で、現在の10月だって。

とにかく、7bit なら 7桁で、8bit だと 8桁で、信号を伝えます。
7bit(7桁)だと0から最高1111111まで、128通りもあるんです。
8bit(8桁)だと256通り。けっこうありますね。

図にしてみました。コンピュータで、128、256、512という数字は良くでてきますが、2進法の数字というわけですね。

1バイト言語と2バイト言語

アルファベットや数字、記号は、1バイト( 8bit なら 256種類、7bit で 128種類)で十分表現できる文字数です。
こういう英語やドイツ語など、1バイトで表現できる文字の言語を1バイト言語って言います。

コンピュータに各国の言語を使おうとした頃に、
日本語、中国語、朝鮮語の文字は、とてもじゃないけど256じゃ無理だった。
(比較的文字数が少ないハングルでも、2500文字以上あるそうです。漢字だともっとスゴそう)
で、拡張して 2バイト(16bit。2の16乗ね)の、65,536種類を表現できるようにしたんだって。これならイケルだろう。
こういう 2バイトで表現する文字を持つ言語を 2バイト言語って言うんだそうです。
(ダブルバイト言語、マルチバイト言語とも呼ぶそうです)
2バイト言語は、日本語、中国語、韓国語、ヴェトナム語、アラビア語などだそうです。

最初はアメリカで、7bitから始まった(ASCIIコード)

創世記のコンピュータで表示できるのは文字だけ(今じゃ動画も表示できますけどね)
それも当然「数字とアルファベットと記号」のみ。

1963年、米国規格協会 (ANSI) が「ASCII(アスキー)」という文字コードを制定。
ASCIIとは、American Standard Code for Information Interchangeの頭文字。

ASCIIは 7bit 。なのでさっきの 2進数の表のとおり、2進数の7桁、128文字が表現できます。
94文字は印字可能な文字(アルファベット、数字、記号)、残りの34文字はスペースや制御文字(NULとかDELなど)です。 
(ASCIIは、最初に 0 をつけて 8bitとして扱うこともあるんだそうです。)

このASCIIコードを元にして、1967年、国際規格の「ISO 646」が作られました。
ISOとは、International Organization for Standardization(国際標準化機構)の頭文字です。

このとき、
94文字のうちの12文字を、各国の事情に合わせた文字に変えたんだって。
例えば日本だとこの2文字→「 \ 」と「 ~ 」。
「 \(バックスラッシュ)」を「 ¥(円マーク)」に、
「 ~(チルダ)」を「  ̄(オーバーライン)」に変えました。

これで「いろんな国版の ISO 646」ができてって、「同じ文字なのに違うビット列になってる」という混乱…にもなったらしい。

そのほかの1バイトのもの(EBCDIC)

ASCIIと同じような頃、1964年にIBMが作った「EBCDIC(エビシディック)」という文字コードもあり、これは8bit(256文字)だそうで、汎用コンピュータに使われるそうです。

日本語の標準文字コードになった ISO-2022-jp(JIS)

「JIS(ジス)」とか「JISコード」といわれてますが、正式名称は「ISO-2022-JP」といい、1978年にできました。
この「JIS(ジス)」とは、日本工業規格という「JISマーク」でおなじみのアレです。
Japanese Industrial Standards の頭文字。

「ISO-2022-JP」の最大の特徴は、7bit だってこと。

電子メールシステム(当時はパソ通?)はアメリカ生まれなので、当然ASCIIコードしか使われていなかった。
で、同じ7bitで日本語を表現できる文字コードが必要に。(じゃないとエラーで送れないから)
それで生まれたのがこの「ISO-2022-JP」なんだって。

これが日本の電子メールでの標準になったのだそうです。
今でも、海外の古い日本語サイトは、この「ISO-2022-JP」を使ってたりするそうです。

ここで「7bit で 128通りなのに、7bitで日本語を表現?」って思いませんか?

「ISO-2022-JP」は「文字符号化方式」という エンコードのためのシステムなんだって。
(「ASCII」は 符号化文字集合と文字符号化方式が一緒になった「文字コード」と素直に言えるモノ)
「符号化文字集合」は別にある。しかも多数(日本語は漢字もあってスゴい数だから)
なので 7bit でも大丈夫らしいです。
ちなみに日本語の「符号化文字集合」は、ISO 646、JIS X 0211、JIS X 0201、JIS X 0208など。

ですが、「ISO-2022-JP(いわゆるJIS)」を「文字コード」って言っても通じるようなので、前回の記事のタイトルには、このコトバを使いました。
(「文字エンコード」にしようかと、さんざん迷ったけど)

「ISO-2022-JP」は、複数の符号化文字集合をエスケープシーケンスで切り替える方式。
「ここからはJIS X 0211、ここからISO 646、でまたここからJIS X 0211よ…」ってな具合に、「区切りの符号」を入れて、コンピュータに文字集合を切り替える指令を与えるんだそうです。

次回に続きます。ごめんなさいよ。

ここで1回切ります。(このまま続けるには話が長いわ)
ここまで1970年代の後半の話。
このあと、1980年代に「Shift_JIS」「Unicode」が登場します。
すぐにアップします。次で完結。

関連記事
この記事をはてなブックマークに追加

やる気を保つためにランキングに参加しています。
応援してくださると すっごいやる気を出します! (笑)

初心者にも使いやすい(と思う)レンタルサーバー

「レンタルサーバーはどこがいい?」とご質問をよくいただきますが、自分でも使っていてオススメなのは スターサーバー (ミニバードがスターサーバになりました)。管理画面がわかりやすくていい感じす。
仕事で使ってるロリポップ!もわかりやすい管理画面で、初めてでもすんなり使えます。
両方とも、なんといっても料金が安いです。

ちょっと料金は高いけど、高スペックでコスパが良く、信頼性も高いサーバといえば、やはりさくらのレンタルサーバと、エックスサーバー 。この2つは老舗でユーザーも多いので、質問する場がたくさんあり、初心者の方でもイケるだろうと思います。

スポンサーリンク

コメントの投稿

ご注意:メールアドレスは書かないで
「コメントを送信する」ボタンを押した後の「確認画面」で、メールアドレス・URL などを入力できるようになっており、メールアドレス・URL は、そのままオートリンクになる仕様です。
当方でメールアドレスだけ削除することも、メールアドレスを非公開にすることもできません
メールアドレスは書かないでください。詳しくはこちらにまとめましたのでご覧ください。

スポンサーリンク
最新記事
Category
オススメの本
Links
Calendar
08 | 2018/09 | 10
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
Archive
RSS Link
Profile

yuki★hata

Author : yuki★hata
せめて月1回の更新をめざします~。

メールフォームはこちら

スポンサーリンク
スポンサーリンク
Copyright © ほんっとにはじめてのHTML5とCSS3 All Rights Reserved.