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

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

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

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

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

[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進数、パーセント)」をごらんください。

最小単位は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」を使ってたりするそうです。

ここで1つ。
「7bit で128通りなのに、7bitで日本語を表現??」って、この辺が私がコンフューズしたところ。
「ASCII」は(符号化文字集合と文字符号化方式が一緒になった)「文字コード」と素直に言える。
一方の「ISO-2022-JP」は「文字符号化方式」。エンコードのためのシステム。
「符号化文字集合」は別にある。しかも多数(日本語の文字は漢字もあってスゴい数だから)。
(日本語の「符号化文字集合」は、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」が登場します。
すぐにアップします。次で完結。

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

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

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

最近よく「レンタルサーバーはどこがいい?」とご質問が来ます。
自分でも使っていてオススメなのはミニバード。管理画面がわかりやすくていい感じす。
仕事で使ってるロリポップもわかりやすい管理画面で、初めてでもすんなり使えると思います。
両方とも、なんといっても料金が安いです。初めてだとなるべく安いほうがイイですからね。

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

レンタルサーバーは、たくさんあり過ぎて迷いますよね。近いうちに、初心者にも良さげなサーバーについて記事にまとめます。*記事をアップしたらココにもリンクを貼ります。

スポンサーリンク

コメントの投稿

スポンサーリンク
最新記事
Category
オススメの本
Links
Calendar
07 | 2017/08 | 09
- - 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 31 - -
Archive
RSS Link
Profile

yuki★hata

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

メールフォームはこちら

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