ASCII
ASCII(アスキー)は、英: American Standard Code for Information Interchange)の略であり、1963年に制定された、アメリカにおける情報通信用の文字コードである。
日本語訳は「情報交換用米国標準コード[1]」となるが、一般には日本国内でもASCIIと表記する。なおInternet Assigned Numbers Authority (IANA) はこれをASCIIではなくUS-ASCIIと表記するのが望ましいとしている[2]。
概要
1963年6月17日に、American Standards Association(ASA、後のANSI)によって制定された。当時の規格番号は ASA X3.4、現在の規格番号は ANSI INCITS 4 である。
0番から127番までの番号(数値)がどの文字や記号を意味するかという対応関係を定めている[3]。
ASCIIは、あくまで1960年代のアメリカにおいて英語での通信や当時のアメリカのコンピュータに必要な文字や記号などが含まれるように定めた文字コードである。そのため、含まれているのは次のような文字や記号や制御文字であり、それ以外はサポートされない。
- 《英語で使われるアルファベット》の大文字と小文字
- 英文でよく使われる約物など
- 0から9までの数字(アラビア数字)
- 制御文字(ASCIIに含まれた制御文字については#ASCII制御文字の節で説明する)
これらの文字や記号をすべて通し番号で表現できるように、7ビットを使っている。つまり2進数で7桁、具体的には0000000から1111111まで、10進数でいえば0番から127番までの番号を使い、それぞれの数値(番号)に対応する文字や約物や数字や制御文字を決め、その対応の規則(コード)を制定したものである。
ASCIIの構成は次のようになっている:
コード範囲(16進) | 内容 |
---|---|
00–1F | 制御文字 |
20 | 空白 |
21–7E | 図形文字 |
7F | 制御文字(DEL) |
ASCIIはISO標準7ビット文字コードISO/IEC 646の元となった。しかし7ビットでは英語以外の言語に対応するには不十分であり、後に他のヨーロッパ言語で使われるラテン文字への対応を追加した8ビット文字コードであるISO/IEC 8859が策定された。その後、世界中で使用されている様々な文字を表現できるようにするため、ASCIIで使用されていない128番以降の部分に、その他の文字を割り当てたり、複数バイトを使用して1つの文字を表現したりするように独自拡張した文字符号化方式が使われるようになっていった。
ASCII制定当時、最小のデータ処理単位(メモリアドレッシングの最小単位)つまりバイトが6ビットであるコンピュータも多かった(DECのPDPシリーズなど)。そのようなコンピュータでは6ビットの文字符号化方式を採用しており、そのためISO/IEC 646の策定にあたっては、7ビット符号化案の他に6ビット符号化案もあった。のちに1バイトを8ビットとみなす、つまりオクテットを採用するコンピュータが人気となり、主流となっていった。オクテットを採用したコンピュータでASCIIを扱う場合、1ビットの余りがあるので、その8ビット目は通信におけるエラーチェック用のパリティビットとして用いられていた。21世紀初頭においても、互換性を維持する目的で、7ビットコードが正式で、8ビット目は使用できない規格がいくつか存在する。
欠点など
![]() | この節は中立的な観点に基づく疑問が提出されているか、議論中です。 (2023年2月) |
![]() | この節には独自研究が含まれているおそれがあります。 |
![]() |
![]() | この節の正確性に疑問が呈されています。 |
![]() | この節には百科事典にふさわしくない内容が含まれている可能性があります。 |
![]() | この節には、過剰に詳細な記述が含まれているおそれがあります。百科事典に相応しくない内容の増大は歓迎されません。 |
- ASCIIの欠点と、それが原因で各国で起きたこと
ASCIIはあくまでアメリカにおいてアメリカ人の都合で制定されたものなので、英語以外の言語への配慮が全く欠如している。西ヨーロッパ諸国の言語への配慮すらも、全く欠如している[注釈 1]。 ASCIIは英語圏以外では基本的な通信にすら使えず、不便すぎるので、各国それぞれで独自にASCIIに代わる文字コードが生み出される事態を生んだ。たとえばブラジルではASCIIの代わりに、ブラジル・ポルトガル語で通信するのに必要なアクセント記号つきのアルファベットも含む文字コードで、ASCIIとは異なる、BraSCIIが生み出された。あるいは、ASCIIの表の後ろに独自に対応表を足すということが行われた国もある。
各国でそれぞれのやりかたで文字コードが生み出され乱立してしまう事態になった。たとえば対応表の同じ位置が、Aという国とBという国で全然異なる文字が割り当てられるという事態になり、そのうえ、文字コード表を置き換えるというやりかただけでなく、ASCIIの表の後ろに別表を足すというやり方も行われ、各国で独自に根本的に考え方が違うやりかたでの対応が勝手に行われた。そしてそれに関するドキュメントや解説書は、(当然だが英語ではなく)それぞれの言語で書かれたので、ついには世界中の文字コードが全体としてどのような状態になっているのかについて、俯瞰して理解できる人がほとんどいないくらいの大混乱状態に陥ってしまった。その結果、世界各国の文字コードに完全に対応するコンピュータを開発することが非常に困難になってしまい、コンピュータで複数の言語を使おうとすると文字化けが頻発するようになってしまった。 [注釈 2]
現在では、可能な場合は、システム上の混乱を生み《文字化け》を頻発しがちなASCIIの代わりに、unicode(ユニコード)が使われることが一般化している。[注釈 3]
ASCII制御文字
初めの32文字(10進数で0–31)はASCIIでは制御文字として予約されている。基本的にはこれらの制御文字は表示するための文字ではなく、モニタやプリンタなどの機器を制御するために用いられる。例えば、ASCII 10(10進)は line feed(改行)を表しプリンタの紙送りなどに用いる、ASCII 27 はエスケープを表す。
ASCII 127(全てのビットがオン、つまり、2進数で1111111)は、delete(削除文字)として知られる制御文字である。この記号が現れた場合、その部分のデータが消去されていることを示す。この制御文字だけ先頭部分になく最後にある理由は、パンチテープへの記録は上書きが出来ないため、削除する際には全てに穴を空けることで対応できるというところからきている(1111111は全てに穴の開いた状態を示す)。また、ASCII 0(全てのビットがオフ、つまり2進数で0000000)は Null あるいはヌル文字と呼ばれ、delete と同様に多くのコンピュータシステムでは無視される。これは、仮にパンチテープと反対に1を0に変えることでデータを記録し、かつ上書きが不可能な媒体が存在する場合でも対応できるようにしているのである。
コードの多くは、データ転送プロトコルで用いられる。(例:ヘッディング開始、テキスト開始、テキスト終了など)
セパレータは磁気テープへの保存のために設計された。
XON や XOFF は、プリンタのような処理の遅いデバイスにおいて、データを失うことがないように情報の流れを制御するために用いることがある。
2進 | 8進 | 10進 | 16進 | 略語 | 図形表現 | CS | エスケープシーケンス | 名前/意味 |
---|---|---|---|---|---|---|---|---|
000 0000 | 000 | 0 | 00 | NUL | ␀ | ^@ | \0 | ヌル文字 |
000 0001 | 001 | 1 | 01 | SOH | ␁ | ^A | ヘッディング開始 | |
000 0010 | 002 | 2 | 02 | STX | ␂ | ^B | テキスト開始 | |
000 0011 | 003 | 3 | 03 | ETX | ␃ | ^C | テキスト終了 | |
000 0100 | 004 | 4 | 04 | EOT | ␄ | ^D | 伝送終了 | |
000 0101 | 005 | 5 | 05 | ENQ | ␅ | ^E | 問い合わせ | |
000 0110 | 006 | 6 | 06 | ACK | ␆ | ^F | 肯定応答 | |
000 0111 | 007 | 7 | 07 | BEL | ␇ | ^G | \a | ベル |
000 1000 | 010 | 8 | 08 | BS | ␈ | ^H | \b | 後退 |
000 1001 | 011 | 9 | 09 | HT | ␉ | ^I | \t | 水平タブ |
000 1010 | 012 | 10 | 0A | LF | ␊ | ^J | \n | 改行 |
000 1011 | 013 | 11 | 0B | VT | ␋ | ^K | \v | 垂直タブ |
000 1100 | 014 | 12 | 0C | FF | ␌ | ^L | \f | 書式送り |
000 1101 | 015 | 13 | 0D | CR | ␍ | ^M | \r | 復帰 |
000 1110 | 016 | 14 | 0E | SO | ␎ | ^N | シフトアウト | |
000 1111 | 017 | 15 | 0F | SI | ␏ | ^O | シフトイン | |
001 0000 | 020 | 16 | 10 | DLE | ␐ | ^P | 伝送制御拡張 | |
001 0001 | 021 | 17 | 11 | DC1 | ␑ | ^Q | 装置制御1、XON | |
001 0010 | 022 | 18 | 12 | DC2 | ␒ | ^R | 装置制御2 | |
001 0011 | 023 | 19 | 13 | DC3 | ␓ | ^S | 装置制御3、XOFF | |
001 0100 | 024 | 20 | 14 | DC4 | ␔ | ^T | 装置制御4 | |
001 0101 | 025 | 21 | 15 | NAK | ␕ | ^U | 否定応答 | |
001 0110 | 026 | 22 | 16 | SYN | ␖ | ^V | 同期信号 | |
001 0111 | 027 | 23 | 17 | ETB | ␗ | ^W | 伝送ブロック終結 | |
001 1000 | 030 | 24 | 18 | CAN | ␘ | ^X | 取消 | |
001 1001 | 031 | 25 | 19 | EM | ␙ | ^Y | 媒体終端 | |
001 1010 | 032 | 26 | 1A | SUB | ␚ | ^Z | 置換 | |
001 1011 | 033 | 27 | 1B | ESC | ␛ | ^[ | \e | エスケープ |
001 1100 | 034 | 28 | 1C | FS | ␜ | ^\ | ファイル分離標識 | |
001 1101 | 035 | 29 | 1D | GS | ␝ | ^] | グループ分離標識 | |
001 1110 | 036 | 30 | 1E | RS | ␞ | ^^ | レコード分離標識 | |
001 1111 | 037 | 31 | 1F | US | ␟ | ^_ | ユニット分離標識 | |
111 1111 | 177 | 127 | 7F | DEL | ␡ | ^? | 抹消 |
ASCII印字可能文字
ASCII 32は、空白文字である。キーボードのスペースキーから入力でき、語と語の間に空白を表示する。 ASCII 33–126は印刷可能な文字 (printable characters) であり、半角英数の数字、句読点や記号を表す。若い順からエクスクラメーションマーク、ダブルクオーテーション、…と続き、ラテン文字大文字の前に数字と大半の半角約物、大文字と小文字の間、ラテン文字小文字の後にも数種類の半角約物が割り当てられている。
下の図では、16進数・10進数・8進数の順でASCIIコードの値を示す。
凡例:
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
_ | 2 SP 20(16) 32(10) 40(8) |
! 21(16) 33(10) 41(8) |
" 22(16) 34(10) 42(8) |
# 23(16) 35(10) 43(8) |
$ 24(16) 36(10) 44(8) |
% 25(16) 37(10) 45(8) |
& 26(16) 38(10) 46(8) |
' 27(16) 39(10) 47(8) |
( 28(16) 40(10) 50(8) |
) 29(16) 41(10) 51(8) |
* 2a(16) 42(10) 52(8) |
+ 2b(16) 43(10) 53(8) |
, 2c(16) 44(10) 54(8) |
- 2d(16) 45(10) 55(8) |
. 2e(16) 46(10) 56(8) |
/ 2f(16) 47(10) 57(8) |
_ | 30 30(16) 48(10) 60(8) |
1 31(16) 49(10) 61(8) |
2 32(16) 50(10) 62(8) |
3 33(16) 51(10) 63(8) |
4 34(16) 52(10) 64(8) |
5 35(16) 53(10) 65(8) |
6 36(16) 54(10) 66(8) |
7 37(16) 55(10) 67(8) |
8 38(16) 56(10) 70(8) |
9 39(16) 57(10) 71(8) |
: 3a(16) 58(10) 72(8) |
; 3b(16) 59(10) 73(8) |
< 3c(16) 60(10) 74(8) |
= 3d(16) 61(10) 75(8) |
> 3e(16) 62(10) 76(8) |
? 3f(16) 63(10) 77(8) |
_ | 4@ 40(16) 64(10) 100(8) |
A 41(16) 65(10) 101(8) |
B 42(16) 66(10) 102(8) |
C 43(16) 67(10) 103(8) |
D 44(16) 68(10) 104(8) |
E 45(16) 69(10) 105(8) |
F 46(16) 70(10) 106(8) |
G 47(16) 71(10) 107(8) |
H 48(16) 72(10) 110(8) |
I 49(16) 73(10) 111(8) |
J 4a(16) 74(10) 112(8) |
K 4b(16) 75(10) 113(8) |
L 4c(16) 76(10) 114(8) |
M 4d(16) 77(10) 115(8) |
N 4e(16) 78(10) 116(8) |
O 4f(16) 79(10) 117(8) |
_ | 5P 50(16) 80(10) 120(8) |
Q 51(16) 81(10) 121(8) |
R 52(16) 82(10) 122(8) |
S 53(16) 83(10) 123(8) |
T 54(16) 84(10) 124(8) |
U 55(16) 85(10) 125(8) |
V 56(16) 86(10) 126(8) |
W 57(16) 87(10) 127(8) |
X 58(16) 88(10) 130(8) |
Y 59(16) 89(10) 131(8) |
Z 5a(16) 90(10) 132(8) |
[ 5b(16) 91(10) 133(8) |
\ 5c(16) 92(10) 134(8) |
] 5d(16) 93(10) 135(8) |
^ 5e(16) 94(10) 136(8) |
_ 5f(16) 95(10) 137(8) |
_ | 6` 60(16) 96(10) 140(8) |
a 61(16) 97(10) 141(8) |
b 62(16) 98(10) 142(8) |
c 63(16) 99(10) 143(8) |
d 64(16) 100(10) 144(8) |
e 65(16) 101(10) 145(8) |
f 66(16) 102(10) 146(8) |
g 67(16) 103(10) 147(8) |
h 68(16) 104(10) 150(8) |
i 69(16) 105(10) 151(8) |
j 6a(16) 106(10) 152(8) |
k 6b(16) 107(10) 153(8) |
l 6c(16) 108(10) 154(8) |
m 6d(16) 109(10) 155(8) |
n 6e(16) 110(10) 156(8) |
o 6f(16) 111(10) 157(8) |
_ | 7p 70(16) 112(10) 160(8) |
q 71(16) 113(10) 161(8) |
r 72(16) 114(10) 162(8) |
s 73(16) 115(10) 163(8) |
t 74(16) 116(10) 164(8) |
u 75(16) 117(10) 165(8) |
v 76(16) 118(10) 166(8) |
w 77(16) 119(10) 167(8) |
x 78(16) 120(10) 170(8) |
y 79(16) 121(10) 171(8) |
z 7a(16) 122(10) 172(8) |
{ 7b(16) 123(10) 173(8) |
| 7c(16) 124(10) 174(8) |
} 7d(16) 125(10) 175(8) |
~ 7e(16) 126(10) 176(8) |
|
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F |
大文字のASCII値に32を加えると小文字に変換することができる。この変換は、2進法では、6ビット目に1をセットするだけでよい。また、数字から48を減じれば、対応する値が得られる。この変換は、5ビット目及び6ビット目に0をセットするか、あるいは単純に上位4ビットを無視するだけでもよい。なお、印字可能文字のうち「@」から始まる32文字については、ASCII値を64減じて対応する制御文字を求め、この制御文字を「コントロール+」(英: control+)という前置表現を付けた印字可能文字で表記する慣習がある。
例:BELコード(07) →「コントロール+G」(受信した側の機器で注意喚起音が鳴る)
この制御文字の表記方法は、キーボード上の印字可能文字キーを制御文字の送出に用いていた機器の名残りであると考えられる(7ビット目を0にセットする専用キー(Ctrlキー)を、印字可能文字キーと同時に押して制御文字を送出)。
また、Unix 端末では Ctrl+数字 によって、人間工学的に押下しづらい制御文字を送出できる。キャレット記法を用いると、具体的には以下であることが多い。[要出典]
- Ctrl+2 が
^@
- Ctrl+3 が
^[
- Ctrl+4 が
^\
- Ctrl+5 が
^]
- Ctrl+6 が
^^
- Ctrl+7 が
^_
- Ctrl+8 が
^?
脚注
注釈
- ^ アメリカ人が開発したので、アメリカ英語のことしか考えておらず、英語以外の言語への配慮が全く欠如している。たとえば西ヨーロッパ諸国の人々が母国語を表記するのに当然必要なアクセント文字群は全然含まれておらず、スペイン語、ポルトガル語、フランス語、ドイツ語などは全然うまく表記できない。たとえば基本語彙を挙げると、ポルトガル語の基本語彙のひとつ「明日」は「amanhã アマニャン」というが、ASCIIにはãという文字が含まれていないので、「じゃあ、また明日ね」というポルトガル人が毎日のように交わす挨拶すら表記できない。ポルトガル語で腕は「braço ブラッソ」だがASCIIには「ç」(cの下にヒゲがついたような文字)が含まれないので、ポルトガル人はASCIIでは「腕」という基本的な語すら書くことができない。(各言語のどの文字や基本語彙が書けないか、いちいち説明していると長文になりすぎるので省略するが)ともかく、同様にスペイン語、フランス語、ドイツ語などの基本的な語彙すらASCIIでは書くことができない。ともかくオリジナルのASCIIは、基本的に英語でしか使い物にならない代物である。
- ^ ASCIIは、英語圏や、アメリカと特に関係が深い国(日本も含む)のパーソナルコンピュータやワークステーションでは扱うことができることが一般的ではある(それが原因で、日本人の一部には、ASCIIが世界のどのマシンでも通用すると思い込んでいる人がいる)。だが、実は、英語圏以外のシステムでは、ASCIIとは別の文字コードで動いていた/いる マシンもあり、ASCIIが正常に動かないシステムもある/あった。たとえばフランス全土で普及したミニテルは(最初はともかくとして)次第にASCIIとは別の文字コードでしか動かない仕様へと変化していった。
- ^ なお、日本で使われている同じISO/IEC 646ファミリーのJIS X 0201は、92番の文字に「バックスラッシュ」('\')の替わりに「円記号」('¥')が、126番に「チルダ」('~')の替わりに「オーバーライン」('‾')が割り当てられてしまっており、ディレクトリを示すために\ と書きたくても、お金と全く無関係なのに'¥'記号を表示しなければならないという欠陥が残ってしまった。
出典
- ^ “情報交換用米国標準コード”. www.ibm.com (2014年2月20日). 2022年6月29日閲覧。
- ^ "Character Sets". Internet Assigned Numbers Authority (IANA). 2007-05-14. [1]
- ^ ASCII(アスキー / US-ASCII)とは - 意味をわかりやすく - IT用語辞典 e-Words
参考文献
- 「ANSI INCITS 4-1986 (formerly ANSI X3.4-1986) American National Standard for Information Systems ― Coded Character Sets ― 7-Bit American National Standard Code for Information Interchange (7-Bit ASCII)」American National Standards Institute(1963年6月17日制定、1986年3月26日最終改正、2002年1月15日規格番号変更)