ASCII

12.2. ASCII

文字と整数の翻訳方法を見ていきましょう。 英数字等の基本文字に対しては 0から127までの整数を割り当てる ASCII(American Standard Code for Information Interchange、アスキー) 規格が多くの状況で使われています。

文字と変換表 #

ASCIIでは128種類の文字に番号 [0,127] を割り当てます。 並び順を以下の表に示します。この表では、1行に16の文字を並べ上の行ほど若い番号、 同じ行ではから左が若い番号となるよう配置しています。 ブラウザの幅の制限で表の右の方は隠れています。 右側は水平スクロールバーを使って見てください。

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

表の左端の列は行番号のラベル、上端の行は列番号のラベル (16進数) です。 普通の文字は 33文字目 SP (空白文字)から始まるので、行番号 2 以降 ( \(\small r\ge 2\) ) を掲載しました。 表の r行 c列に文字があるとき 2文字並べた rc が16進数での文字の番号です。 たとえば、 SPは2行目 (r=2) 0列目 (c=0) にあるので番号は16進で20 10進で \(2\cdot 16+0= 32 \) 、同様に Aは16進で41 10進で \(4\cdot 16+1= 49 \) oは16進で6F 10進で \(6\cdot 16+15= 111 \) です。16進数の読み方は次のページ 12.3. bit列と2進数 で確認します。

文字列 #

文字列を整数列に変換する際は、1文字ずつ独立に変換して並べます。
以下は u-tokyo.ac.jp という文字列の表現です。当然ですが、同じ文字には同じ数が対応します。

u - t o k y o . a c . j p
16進 75 2D 74 6F 6B 79 6F 2E 61 63 2E 6A 70
10進 117 45 116 111 107 121 111 46 97 99 46 106 112
日本語を含めて使う文字種を増やした場合は、ずっと複雑な規則が必要になります。

特徴 #

ASCIIには以下のような便利な点があります

  • 1文字を 1 byte (8bit) 以内で表現できます。文字列の各byte を独立に変換できます。等長符号 と呼びます。
  • 0から9AからZaからz が並んで対応します。
    これにより、文字 3 の4あとの文字は 7 と算術と対応します。 Aの2つあとの文字が番号の上でも C となり直観と一致します。
  • 同様に大文字小文字の変換を、どの文字でも、番号を 32 ずらすことで行えます。たとえばb-B = x-X = 32 です。

文字と番号の対応に ASCIIを採用するか別の方法 (たとえば別の表) を考えるかは、任意性があり、慣習や文化の範疇です。 とはいえ ASCII とそれ以外の方法を使うコンピュータ同士で通信しようとすると、翻訳が必要になりますから、現時点で積極的に他の方法に切り替えるメリットはありません。

ASCIIに収録されている文字は、実用上、文字化けせず安全に使うことができます。これはほぼすべての環境が ASCII 互換のためです。
円マーク ¥ がASCIIに含まれないことに注意してください。この記号は文字化けします。 過去の日本では バックスラッシュ \ の番号である 5C¥に替えて使っていたことがあります。 そのため Microsoft Windows でのファイルパスの区切り文字が国際的にはバックスラッシュ\, 日本でのみ円記号になっています。一方 Unicode やヨーロッパで使われる iso-8859-1では別の番号に¥記号が割り当てられました。

制御文字 #

番号0から32までは制御文字 (control character) と呼ばれる、特殊な役割を持つ符号です。 通常の文字同様にこれらが定義されているので キーボードにある BS, ESC, TAB などのキーが押された際に、 どのキーが押されたかを他の文字とまったく同じように ASCII の番号でコンピュータが認識できます。 それらの他にも通信で使われる (いた) 符号が定義されています。

r\c 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

その中で改行を表す符号が複数あることは、注意を払う価値があります。

CR
carriage return の略で改行を表す文字の一つです。もともとの意味は「タイプライターの印字装置を行の先頭に戻す」(復帰)です。
LF
line feed の略で改行を表す文字の一つです。こちらも元々はタイプライターに由来し、「1 行紙を送る」ことが原義です。

どの文字を改行に用いるかは歴史と文化の側面があり、LF が Linux, BSD などの UNIX 系 OS、CR+LF の2文字がMicrosoft Windows など、CR が過去の Mac などで主流でした。

つまり改行については、日本語などでおこりうる「文字化け」同様の不具合がASCIIで定義されていた文字のみを使っていても起こりえます。
DEL
制御文字は先頭32文字に配置されていますが、 「削除」を表す DEL だけは通常の文字の最後の 7F に配置されています。 これは7bitを2進数であらわすと 1111111 となり認識しやすいためと言われています。
数や文字による指示 ASCII bit列と2進数