コンテンツにスキップ

ASCII

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Sygh (会話 | 投稿記録) による 2023年2月18日 (土) 12:58個人設定で未設定ならUTC)時点の版 (内部リンクを追加・修正。)であり、現在の版とは大きく異なる場合があります。

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年代のアメリカにおいて英語での通信や当時のアメリカのコンピュータに必要な文字や記号などが含まれるように定めた文字コードである。そのため、含まれているのは次のような文字や記号や制御文字であり、それ以外はサポートされない。

これらの文字や記号をすべて通し番号で表現できるように、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ビットであるコンピュータも多かった(DECPDPシリーズなど)。そのようなコンピュータでは6ビットの文字符号化方式を採用しており、そのためISO/IEC 646の策定にあたっては、7ビット符号化案の他に6ビット符号化案もあった。のちに1バイトを8ビットとみなす、つまりオクテットを採用するコンピュータが人気となり、主流となっていった。オクテットを採用したコンピュータでASCIIを扱う場合、1ビットの余りがあるので、その8ビット目は通信におけるエラーチェック用のパリティビットとして用いられていた。21世紀初頭においても、互換性を維持する目的で、7ビットコードが正式で、8ビット目は使用できない規格がいくつか存在する。

欠点など

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に変えることでデータを記録し、かつ上書きが不可能な媒体が存在する場合でも対応できるようにしているのである。

コードの多くは、データ転送プロトコルで用いられる。(例:ヘッディング開始、テキスト開始、テキスト終了など)

セパレータは磁気テープへの保存のために設計された。

XONXOFF は、プリンタのような処理の遅いデバイスにおいて、データを失うことがないように情報の流れを制御するために用いることがある。

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 装置制御1XON
001 0010 022 18 12 DC2 ^R 装置制御2
001 0011 023 19 13 DC3 ^S 装置制御3XOFF
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コードの値を示す。

凡例:

 アルファベット
 制御文字
 数字
 記号
 拡張記号
 図形文字
 国際
 未定義
ASCII (American Standard Code for Information Interchange) 印字可能文字
16進の1の位が_0 16進の1の位が_1 16進の1の位が_2 16進の1の位が_3 16進の1の位が_4 16進の1の位が_5 16進の1の位が_6 16進の1の位が_7 16進の1の位が_8 16進の1の位が_9 16進の1の位が_A 16進の1の位が_B 16進の1の位が_C 16進の1の位が_D 16進の1の位が_E 16進の1の位が_F
(16進の10の位が)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)
(16進の10の位が)3_ (数字)0
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)
(16進の10の位が)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)
(16進の10の位が)5_ (アルファベット)P
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)
(16進の10の位が)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)
(16進の10の位が)7_ (アルファベット)p
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^?

脚注

注釈

  1. ^ アメリカ人が開発したので、アメリカ英語のことしか考えておらず、英語以外の言語への配慮が全く欠如している。たとえば西ヨーロッパ諸国の人々が母国語を表記するのに当然必要なアクセント文字群は全然含まれておらず、スペイン語ポルトガル語フランス語ドイツ語などは全然うまく表記できない。たとえば基本語彙を挙げると、ポルトガル語の基本語彙のひとつ「明日」は「amanhã アマニャン」というが、ASCIIにはãという文字が含まれていないので、「じゃあ、また明日ね」というポルトガル人が毎日のように交わす挨拶すら表記できない。ポルトガル語で腕は「braço ブラッソ」だがASCIIには「ç」(cの下にヒゲがついたような文字)が含まれないので、ポルトガル人はASCIIでは「腕」という基本的な語すら書くことができない。(各言語のどの文字や基本語彙が書けないか、いちいち説明していると長文になりすぎるので省略するが)ともかく、同様にスペイン語、フランス語、ドイツ語などの基本的な語彙すらASCIIでは書くことができない。ともかくオリジナルのASCIIは、基本的に英語でしか使い物にならない代物である。
  2. ^ ASCIIは、英語圏や、アメリカと特に関係が深い国(日本も含む)のパーソナルコンピュータワークステーションでは扱うことができることが一般的ではある(それが原因で、日本人の一部には、ASCIIが世界のどのマシンでも通用すると思い込んでいる人がいる)。だが、実は、英語圏以外のシステムでは、ASCIIとは別の文字コードで動いていた/いる マシンもあり、ASCIIが正常に動かないシステムもある/あった。たとえばフランス全土で普及したミニテルは(最初はともかくとして)次第にASCIIとは別の文字コードでしか動かない仕様へと変化していった。
  3. ^ なお、日本で使われている同じISO/IEC 646ファミリーのJIS X 0201は、92番の文字に「バックスラッシュ」('\')の替わりに「円記号」('¥')が、126番に「チルダ」('~')の替わりに「オーバーライン」('‾')が割り当てられてしまっており、ディレクトリを示すために\ と書きたくても、お金と全く無関係なのに'¥'記号を表示しなければならないという欠陥が残ってしまった。

出典

  1. ^ 情報交換用米国標準コード”. www.ibm.com (2014年2月20日). 2022年6月29日閲覧。
  2. ^ "Character Sets". Internet Assigned Numbers Authority (IANA). 2007-05-14. [1]
  3. ^ 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日規格番号変更)

関連項目