コンピュータ内で文字を扱う時、文字の形をそのまま記憶したり送受信しているのではなく、文字ごとに決まった番号を割り当ててその番号を記憶したり送受信している。文字や記号に割り当てた番号を文字コードという。
1963年に制定されたASCIIコードが文字コードの元祖と言っていいでしょう。
ASCIIコード(アスキーコード・American Standard Code for Information Interchange・直訳すると情報交換のためのアメリカの標準コード)
「1文字1バイト。1963年にアメリカで制定された文字コード。ほぼどんなコンピュータでも使える。英語で使うアルファベット(小文字のa~zと大文字A~Z)、および数字と記号のいくつかが定義されている」←ASCIIコードのざっくりした説明。押さえてくださいね。
ASCIIコードは「1文字1バイト」と書いてありますが、実は8bitすべてを使うわけではありません。8bit目は0を置き7bitしか使わないのです。つまり二進数0000 0000(2)~0111 1111(2)です。十六進だと00(16)~7F(16)、十進数に直すと0(10)~127(10)です。
表の見方を説明します(ASCIIコード表は読めるようにしておきましょう)。
表は横に上位桁、縦に下位桁を表しています。上位とは大きい位、下位とは小さい位のことです。
例えば大文字の「D」はASCIIコードで何番でしょうか。「D」を表の中から探してください。タイトルの「ASCIIコード表」の「表」の下に「4」とあり、その下「0100」とある列。上から5行目に「D」があります。「D」から左をたどっていくと表の一番左にやはり「4」とあります。
「D」は上位が十六進数「4」(=二進数「0100」)、下位が十六進数「4」(=二進数「0100」)ということで、
上位 下位
0100 0100
4 4
となります。DのASCIIコードは二進数「0100 0100(2)」または十六進数「44(16)」です。これを十進数に直すと、01000100=0+64+0+0+0+4+0+0=68(10)に相当します。「ASCIIコード68番はD」ということです(しかし、十進数で文字コードを表すことはあまりありません)。
同様に、小文字の「o」は右から2列目の一番下なので、上位「0110」、下位「1111」。これを繋げると「0110 1111(2)」つまり「6F(16)」です。また、小文字の「g」は「0110 0111(2)」で「67(16)」です。
ということで、「Dog」という半角英数字の英単語をメールやLINEで送信するとき、十六進数「44 6F 67」という数値を送信しているわけですね。もう少し言うと実際は二進数ですから「010001000110111101100111」と送信しています。これを受信側が、番号から対応する文字に変換して画面に表示している、というわけです。
ASCIIコード表の左の2列(上位0000と0001の列)は「制御文字」といって特殊な意味があるのですが、ここは無視してください。すると残りの6列*16行=96文字しかありません。英文を表示するにはこれだけで充分なのです。アメリカで最初にASCIIコードが制定されたとき、英語をどう表すか、だけしか、考えていなかったということです(ASCIIは「アメリカの」標準コード)。
「二進法とは」のページのスライドの中で、8bit=1バイトと書きましたが、もともとはこのASCIIコード1文字分(8bit)を記憶容量の単位としたのです。つまり100バイトというのは英語100文字分の記憶容量ということです。
十六進数のASCIIコードで「42 75 6E 6A 69」とありました。なんと書いてあるのでしょうか?
日本にASCIIコードが入ってきて、やはり日本人は日本語を表したいと。そこで1バイトASCIIコードの8bit目の「1」がまるまる空いているのでそこにカタカナ50音を割り当てることにしました。日本工業規格(JIS)が定めたのでこれをJISコードと呼びます。ここで定義されたカタカナを現在「半角カナ」と呼んでいます。「アイウエオ」という縦に細長い文字ですね。JIS8ビットコードなどということもあります。「JIS8ビットコード≒ASCII+半角カナ」です。「JIS X 0201」などと言われたりもします。
しかし、日本人は文字をたくさん使います。ひらがな50音、カタカナ50音、数字、記号、漢字!
漢字は小学校で1000文字習います。中学校高校で1000文字。社会人として2000文字使うことになっています。1バイト(=8bit・256通り)ではぜんぜん足りません。そこで2バイト以上を使って拡張して日本語(またはその他の言語)を表す必要がありました。ここでいろいろな派閥に分かれて規格が乱立しました。
ASCIIコードから漢字を使えるように拡張された文字コード。1文字2バイト。JIS16ビットコードということもある。現在でもEメールなどはこのコードで送受信されています。JIS8ビットコードとJIS16ビットを合わせて「JISコード」と呼ぶことが多いです。規格として「ISO-2022-JP」とか「JIS X 0208」とかいろいろな言い方がありますが突っ込むと泥沼になるので省略します。
Microsoft社が中心となって開発された。上記JIS漢字コードを一部ずらして(シフトさせて)使い勝手の悪い部分を直した1文字2バイトの文字コード。主に昔のWindowsと共に使われてきた。WindowsXPまで内部で使われた。
説明略。
これは大事なので以下項目を改めます。
「国際標準化機構(ISO)により制定された。当初、世界の文字すべてを2バイト(=16bit、65536文字)で表現するために作られた文字コード」←Unicodeのざっくりとした説明。
前項のようにやたらといろいろな文字コードができてしまいました。例えば全角ひらがな「あ」を表すコードとして、
2422(16)→JISコード(JIS漢字コード)
82A0(16)→シフトJISコード
A4A2(16)→EUC
しかも困ったことに、外国語とかぶってしまいました。ハングルやらペルシア文字など世の中にはたくさんの文字があります。ある一つの番号が国によって違う文字を表していたのでは外国に文書を送ると読めないことになります。
そこで全世界を一つの(=Uni)コードで表そうじゃないかということでUnicode(ユニコード)が定められました。Unicodeであればトンパ文字(まだ正式決定ではありませんでした)であっても西夏文字であっても全世界共通のコードとして扱えます。そこで現在、Windows、Mac、Linux、スマホのiPhone、Android、すべてUnicodeを使っています。というわけで現在はUnicodeです。2バイトでは無理があったので、現在3バイト使ったり4バイト使ったりする場合もあります。
Unicodeで全角ひらがなの「あ」は
3042(16)→Unicode
これまた違うんですね(汗)。
ときおり、表示しているページが「譁�ュ怜喧縺�」 のような変な文字になることがあり、これを文字化けと呼びます。これは上記文字コードを正しく処理できずにUnicodeで記述されているのにシフトJISコードで表示しようとするなどの誤動作が原因で起こります。また海外のソフトでASCIIコードを前提にしていて、8bit目が「1」だと誤動作するものなどがあります。書き忘れましたが、ASCIIコードはUnicodeの一部として現在も生きています。ASCIIコードは最初のコードなので、JIS、シフトJIS、EUCなどその他のすべてのコードの一部として使われています。ですから文字化けしていても英語の部分だけは読めることがほとんどです。
文字コードとは文字や記号を数値に対応させたもの。いくつか種類がある。代表的なものはASCIIコードとUnicode(この授業ではそう言い切ることにします)。
ASCIIコードとは1バイトで1文字。半角英数字記号を表現できる。
Unicodeとは国際標準化機構(ISO)により制定された、世界の文字すべてを統一して表すための文字コード。現在の標準としてさまざまなコンピュータで使われている。
【質問】・JISコードにはなぜ平仮名は対応しなかったのかがわかりません。8bitあれば256種類は表せるので、ASCIIの112文字、jisのカタカナ類64文字くらいに加えて平仮名もいけると思います。・「社会と情報」の教科書92ページの解答の部分に、全角ひらがなは2バイト文字と書いてあります。上位4ビットの0と1では3文字や2文字の英数字を1バイトで表せているのに、どうして平仮名は1バイトで表さないんですか?(?さん)
【回答】鋭いです。良い質問をいただきました。JIS8ビットコードでも空いているところがあるので平仮名も割り当てられたのではないか、という疑問。これはもっともだと思います。番号と文字を対応させるという意味においては可能でした。では日本でJIS8ビットコードを制定した当時なぜそれをしなかったのか。これはしなかったというよりマシンの処理能力が低すぎて「意味がなかった」のです。このコードが制定されたのは1969年。コンピュータの処理能力は今とは比べ物にならないほど非常に非常に貧弱な物でした。文字の表示においても貧弱。たとえば表示できる文字デザイン(「フォント」と言います)は横5ドット縦7ドット(ここではドット≒ピクセルと考えてください)でした。
上記はJIS8ビットコードそのものではありませんが、5×7のマス目を塗って描く文字フォントのサンプルだと思ってください。カタカナや「い」や「う」ぐらいのシンプルな形(密度)ならば可能ですが、「あ」「ぬ」などを区別させるデザインは無理なことはわかりますよね?そしてこの文字のフォント自体も貴重なメモリを消費するので同じ意味ならむしろ代用したいぐらいなのです。なので平仮名とカタカナを両方扱うことよりも、カタカナのみの方が実用的であり平仮名は定義しませんでした。今でも銀行の振り込みなどがカタカナ表示なのはその名残でしょう。やがて2バイトの文字コードに拡張されたころは、コンピュータの処理能力もあがり、フォントのデザインも16×16になりました。苦しいながら漢字も表示できたのでとうぜん平仮名も2バイト文字コードの一部として定義されました(この正方形のデザインを「全角」と言いまして、それまでの1バイトの文字は横8縦16でデザインして「半角」と言いました。なので1バイトのカタカナは「半角カナ」というのですね)。
質問後半の部分。ASCIIやJIS8ビットコードの上位bit0000と0001の範囲、つまり00(16)~1F(16)に2文字や3文字の英字が書いてある件。これらは表示する文字ではなく、特殊な「制御文字」と呼ばれるものです。たとえば、08(16)は「BS」ですが、これは「BackSpace」の略です。キーボードの「Enter」キーの上にある「BackSpace」というキーがありますが、「a」「(BS)」「b」と押したとき、大昔のコンピュータでは「61 08 62」と送信されて、受け取った方で「a」を一度表示した後、「a」を削除したのちカーソルを一文字分戻して「b」を表示していたのですね。今では全く使われなくなったものも含めて、制御文字とはそのような動作と関連したコードでした。