3. ASCIIコード 

   3−1  ASCIIコードとは
   3−2  ASCIIコードの拡張
   3−3  (コンソール)制御文字
   3−4  改行コードについて


3−1  ASCIIコードとは

英語に使われる文字は、アルファベット26文字、数字10文字、記号類が40字弱、全部あわせても100字未満です。 7ビットあれば、128文字までを割り振ることができるので、英数字を番号付けするには1バイトあれば十分です。
1バイトの範囲内(0〜255)で番号を割り当てた文字を1バイト文字といいます。
現在最も普及している1バイト文字コード体系(どの字にどのコードを振るか決めた規約)は、 ANSI(米国規格協会)が定められた「ASCIIコード」です。
コード番号 0 〜127 ( 0x00 〜 0x7F ) の間に、数字、英字、カッコや句読点の記号類がおさめられています。
 ◆ ASCIIコードにおける英数字 ◆

 |+0 1 2 3 4 5 6 7 8 9 A B C D E F (下位)
 00| ←  制 御 コ ー ド  →
 10| ←  制 御 コ ー ド  →
 20|SP ! " # $ % & ' ( ) * + , - . /
 30| 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
 40| @ A B C D E F G H I J K L M N O
 50| P Q R S T U V W X Y Z [ \] ^ _
 60| ` a b c d e f g h i j k l m n o
 70| p q r s t u v w x y z { | } ~ DL
(上位)

'A' の文字コードは、上位が0x40で下位が0x1、 つまり0x41となります。 (これを10進数に直せば 0x41=16×4+1=65 です。) → 2/10/16進数の関係
'a' の文字コードは 0x61、'A' よりちょうど 0x20 (10進数だと 32)だけ大きな数字です。 英字の大文字のコードに 0x20 を加えると小文字になる、ということになります。
「 Zaco's Page! 」という文字列の文字コードを見てみましょう。

文字
Z a c o ' s   P a g e !
16進
0x5A0x610x630x6F0x270x730x200x500x610x670x650x21
10進
90 97 99 111 39 115 32 80 97 103 101 33

上記文字列の 's' と 'P' の間には空白がありますが、これは実際何もないのではなく、 「空白文字」という文字が存在しています。キーボードのスペースキーを押すごとに、コード番号 0x20 (10進数では32) の文字が入力されるのです。

ASCIIコード自体は英数字しか表現できませんが、英語が事実上の共通言語となっているコンピュータ・インターネットの世界では、 何らかの形で英数字を使わざるを得ません。 そのため、日本語のJIS規格を始め、確認していませんがおそらくほぼ全言語の文字コード体系のコード番号 0 〜127 ( 0x00 〜 0x7F ) に、ASCII 互換の文字コードが割り振られています。


3−2 ASCIIコードの拡張

英語圏はいわゆるアルファベットしか使いませんから、7ビット( 0 〜 127 )あればすべての文字を割り振ることができてしまいます。 けれどもほかの国ではもっとたくさんの文字が使われています。 そこで、1967年、国際標準機構(ISO)によって ISO 646 という国際規格が生まれました。

  ・コード表と字形(グリフ)の対応を2面まで持てる。
   第1面は ASCIIコードとする。ただし、そのうち12箇所だけは
   もとの ASCII と異なる字形に変えてよい。
  ・シフトイン・シフトアウトの制御文字コードで面を切り替える。

日本の場合、JIS(日本工業規格)によって、拡張された第2面に「(半角)カタカナ」が割り振られました。

JISの第2面

ASCIIコードの 0x5C は '\' (バックスラッシュ) です。 日本語文字コード体系であるJISコードでは、半角英数字をほぼ丸ごとASCIIコードに準拠させましたが、 0x5C は '¥' としました。
英語で書かれたコンピュータ関係の情報で、ファイル・フォルダのパス名を示す時に使われる '¥' が '\' になっている文書やWebサイトを見かけますが、それは両者が実は同じコードだからです。

   英語(ASCII) … c:\windows\system\calc.exe
   日本語(JIS) … c:¥windows¥system¥calc.exe


3−3  (コンソール)制御文字

ASCIIコードの 0x00 〜 0x1F および 0x7F には英数字があたっていません。 しかしこれらのコードは、プリンタの印字ヘッドまたは画面上のカーソル位置を制御したり、 データの区切りを示すために使われたりなど、可読文字とは異なる役割を当てられており、 「(コンソール)制御文字」 と呼んでいます。 これら制御文字と区別するため、目に見える英数字などのことを「図形文字」と呼んでいます。

コード 略号 意味
コード 略号 意味
0x00 NUL ヌル文字
0x01 SOH ヘディング開始
0x02 STX テキスト開始
0x03 ETX テキスト終端
0x04 EOT 伝送終了
0x05 ENQ 問い合わせ
0x06 ACK 肯定的応答
0x07 BEL ベル(ビープ音)を鳴らす
0x08 BS  バックスペース
0x09 HT  タブ
0x0A  LF  行送り(ラインフィード)
0x0B VT  垂直タブ
0x0C FF  改ページ
0x0D CR  改復(リターン)
0x0E SO  シフト・アウト
0x0F SI  シフト・イン
0x10 DLE データリンク拡張
0x11 DC1 デバイス制御1
0x12 DC2 デバイス制御2
0x13 DC3 デバイス制御3
0x14 DC4 デバイス制御4
0x15 NAC 否定的応答
0x16 SYN 同期文字
0x17 ETB 伝送ブロック終了
0x18 CAN キャンセル
0x19 EM  メディア終端
0x1A SUB 置換キャラクタ
0x1B ESC エスケープ
0x1C FS  ファイル終端
0x1D GS  グループ区切り
0x1E RS  レコード区切り
0x1F US  ユニット区切り
0x7F DEL 削除

上記のうち、かなりのコード(薄い文字色のもの)は、コンピュータが本格的に利用されるより前、 テレタイプ を制御するために設定されたものであり、一般的なパソコンユーザーにとっては現在あまり大きな意味を持ちません。


3−4 改行コードについて

制御コードの中で最も問題になるのは、改行を示すコードでしょう。
キーボードの [Enter] キーを押すということは、改行コードを入力するのと同義です。 ASCIIコードで記述されたテキストが画面上で(または印刷出力において)改行されるのは、 改行位置に改行を示すコードが挿入されているからです。 入力したデータをディスクに保存する場合、目に見える文字の分のほかに、改行コード分のバイト数を食っています。

さて、その改行コードですが、OSによって実際の値が異なります。
 ・MS-DOS、Windows = CR + LF ( 0x0D+0x0A )…つまり2バイト必要
 ・MacOS = CR ( 0x0D )
 ・UNIX系 = LF ( 0x0A )
異なるOSで作られたテキストファイルを表示したり印刷したりする場合、 改行コードの違いによって正しく表示されないことがあります。 例えば、Unix 環境で作成したテキストファイルを Windows 環境で印字しようとすると 印字が乱れる(ラインフィードはするがリターンしない)といったことが起こる可能性もあります。

下のテキストは改行コードを含むので、Windows環境では下記のように表示(印刷)されます。
文字
Z a c o ' s CRLFP a g e
コード
0x5A0x610x630x6F0x270x730x0D0x0A0x500x610x670x65


 Zaco's
 Page