アスキーコード

らら
らら

ASCIIコードって

ASCIIコードとは(American Standard Code for Information Interchange)の略で情報交換用米国標準コードが正式名称

昔は、ANSI文字コードとかも言われていた。

ANSIとは、American National Standards Instituteの略称で、米国規格協会と訳されています。アメリカの工業製品などの規格の標準化を行なっている非営利団体、日本でいうなら日本工業規格(JIS)に相当

ASCIIはANSIが定める文字コードです。つまりASCIIはANSIの定める規格のひとつになります。

ANSI Cなんてのもあって、米国規格のC言語って感じですね。

ASCIIは、7桁の2進数で表され、2進数のそれぞれに、大文字、小文字のラテン文字(英字)や数字、英文でよく使われる文字などを割り当てた文字コード。

ASCIIは7ビットコードで。情報を表すのに7桁の2進数(10進数では0~127)を使用する。128以降の部分には、日本では、半角カナが登録された 128は16進で0x80、2進数で1000 0000となり8bit必要になるため日本産業規格 (JIS) のJIS X 0201と表記になる、JIS X 0201の部分は、Shift JIS、EUC-JPでは共通の部分となり漢字文字など含んでShift JISコードなどと言われる。

半角カナが追加されている部分までを、ANKコードとか・・・・

JIS X 0201の部分が同じであることは、開発言語で記載されたプログラムコードがどの文字コードでも文字化けしないようになっている。

UTF8等では、ASCIIコードで共通になっているので注意が必要。

また、JIS X 0201では、ASCIIコードのバックスラッシュが円マーク、チルダの替わりにオーバーラインに変更されているので注意が必要です。

これは、日本にパソコンが来た時に、ASCIIコードが各国で変更しても問題ない、まだ規格が統一前だったので、日本の金額を表記する記号がいるということで追加されました。

昔の、パソコンでは、ASCIIコードで表記される部分は、パソコン製造するメーカー毎でばらばらだったため、当時は、拡張部分も機種依存文字があったり・・JISで統一されるようになって現在..

最終的にはNECの形式が採用された。当時のOS DOSも各メーカーが改造を加えていたのでばらばら・・だった。。Windows 98が出るまでは、各ハードメーカーがOSに手を加えていた。。

余談

昔って、プログラムコードの中に漢字つかえなかったんですよね・・・コンパイルエラーとか・・・

当時のソフトは、輸入もので、Shift JISとか漢字に対応していないものが、ほとんどで。。。文字化けだったり・・・Webでいえば、Perl,phpなどがそれで、いまは、UTF8化され問題ないですが・・

MSC 5,6とかぐらいから、まともに・・Turbo C とか、NEC向けもよかったかなぁ。

漢字を拡張するとき、ASCIIコードの領域が使用され、半角カナが使用されていない領域 0x80から0x9f 0xE0から0xFCまでを先頭において、2バイトで表現するようにしたものShift JIS

文字化けは、Shift JISを判断するには、0x80から0x9f 0xE0から0xFCの範囲が見つかったら、2バイトコード漢字だから、次の文字までとって漢字にするロジックがないので文字化けが起きてしまう。。

筆者は、MSC(dosコンパイラ)のライブラリを、VC++に持ってきて、愕然としたのが、perlのように、表示という文字でエラーが・・、、コンパイラの先祖返り・・・まぁ。たぶん、Windowsも内部コードも変わって、Shift JISの判定なくなったんだと・・思ったときが・・・あって・・・

昔、ライフボートから出てた・・Lattice Cとか・・・つらい思い出しかないです。。標準ヘッダー手修正しないとつかえないとか。。。。

アスキーコード表

US-ASCIIコードとする場合は、オーバーラインがチルダ、¥がバックスラッシュです。このあたりは、OSなどで変わるので... Windows10だと、¥と~ででます。。。
b7 0 0 0 0 1 1 1 1
b6 0 0 1 1 0 0 1 1
b5 0 1 0 1 0 1 0 1
b4 b3 b2 b1 0 1 2 3 4 5 6 7
0 0 0 0 0 NUL DLE SP 0 @ P ` p
0 0 0 1 1 SOH DC1 ! 1 A Q a q
0 0 1 0 2 STX DC2 " 2 B R b r
0 0 1 1 3 ETX DC3 # 3 C S c s
0 1 0 0 4 EOT DC4 $ 4 D T d t
0 1 0 1 5 ENQ NAK % 5 E U e u
0 1 1 0 6 ACK SYN & 6 F V f v
0 1 1 1 7 BEL ETB ' 7 G W g w
1 0 0 0 8 BS CAN ( 8 H X h x
1 0 0 1 9 HT EM ) 9 I Y i y
1 0 1 0 A LF SUB * : J Z j z
1 0 1 1 B VT ESC + ; K [ k {
1 1 0 0 C FF FS , < L ¥ l |
1 1 0 1 D CR GS - = M ] m }
1 1 1 0 E SO RS . > N ^ n
1 1 1 1 F SI US / ? O _ o DEL

JIS X 0201 コード表 ANKコード

b8 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
b7 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
b6 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
b5 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
b4 b3 b2 b1 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 0 0 0 0 NUL DLE SP 0 @ P ' p
0 0 0 1 1 SOH DC1 ! 1 A Q a q
0 0 1 0 2 STX DC2 " 2 B R b r
0 0 1 1 3 ETX DC3 # 3 C S c s
0 1 0 0 4 EOT DC4 $ 4 D T d t
0 1 0 1 5 ENQ NAC % 5 E U e u
0 1 1 0 6 ACK SYN & 6 F V f v
0 1 1 1 7 BEL ETB ' 7 G W g w
1 0 0 0 8 BS CAN ( 8 H X h x
1 0 0 1 9 HT EM ) 9 I Y i y
1 0 1 0 A LF/NL SUB * : J Z j z
1 0 1 1 B VT ESC + ; K [ k {
1 1 0 0 C FF FS , < L ¥ l |
1 1 0 1 D CR GS - = M ] m }
1 1 1 0 E SO RS . > N ^ n ~
1 1 1 1 F SI US / ? O _ o DEL ソ

Table 1: ASCII 制御コード

10進数 2進数 8進数 16進数 文字 英語説明 説明
00000NULLNull characterヌル文字
01111SOHStart of Headerヘッディング開始
021022STXStart of Textテキスト開始
031133ETXEnd of Text, hearts card suitテキスト終了
0410044EOTEnd of Transmission, diamonds card suit伝送終了
0510155ENQEnquiry, clubs card suit問い合わせ
0611066ACKAcknowledgement, spade card suit肯定応答
0711177BELBellベル
081000108BSBackspace後退
091001119HTHorizontal Tab水平タブ
10101012aLFLine feed改行
11101113bVTVertical Tab, male symbol, symbol for Mars垂直タブ
12110014cFFForm feed, female symbol, symbol for Venus書式送り
13110115dCRCarriage return復帰
14111016eSOShift Outシフトアウト
15111117fSIShift Inシフトイン
16100002010DLEData link escape伝送制御拡張
17100012111DC1Device control 1装置制御1、XON
18100102212DC2Device control 2装置制御2
19100112313DC3Device control 3装置制御3、XOFF
20101002414DC4Device control 4装置制御4
21101012515NAKNAK Negative-acknowledge否定応答
22101102616SYNSynchronous idle同期信号
23101112717ETBEnd of trans. block伝送ブロック終結
24110003018CANCancel取消
25110013119EMEnd of medium媒体終端
2611010321aSUBSubstitute置換
2711011331bESCEscapeエスケープ
2811100341cFSFile separatorファイル分離標識
2911101351dGSGroup separatorグループ分離標識
3011110361eRSRecord separatorレコード分離標識
3111111371fUSUnit separatorユニット分離標識
12711111111777fDELDelete抹消

Table 2: ASCII ラテン文字用図形文字集合

10進数 2進数 8進数 16進数 文字 説明 説明
321000004020spaceSpace半角スペース
331000014121!Exclamation markエクスクラメーションマーク、びっくりマーク
341000104222"Double quotes ; Quotation mark ; speech marksダブルクォート、二重引用符
351000114323#Number signシャープ、いげた
361001004424$Dollar signドルマーク、ダラー
371001014525%Percent signパーセント
381001104626&Ampersandアンパサンド(アンド)
391001114727'Single quote or Apostropheシングルクォート、単引用符
401010005028(round brackets or parentheses, opening round bracket左小括弧、小括弧開く
411010015129)parentheses or round brackets, closing parentheses右小括弧、小括弧閉じる
42101010522a*Asteriskアスタリスク(アスタ)
43101011532b+Plus signプラス、足す
44101100542c,Commaカンマ、コンマ
45101101552d-Hyphen, minus signマイナス、引く
46101110562e.Dot, full stopピリオド、ドット、てん、ぽち
47101111572f/Slash, forward slash, fraction bar, division slashスラッシュ(スラ)
4811000060300number zero数字0
4911000161311number one数字1
5011001062322number two数字2
5111001163333number three数字3
5211010064344number four数字4
5311010165355number five数字5
5411011066366number six数字6
5511011167377number seven数字7
5611100070388number eight数字8
5711100171399number nine数字9
58111010723a:Colonコロン
59111011733b;Semicolonセミコロン
60111100743c<Less-than signレスザン、小なり
61111101753d=Equals signイコール、等号
62111110763e>Greater-than sign ; Inequalityグレーターザン、大なり
63111111773f?Question markクエスチョンマーク、はてな
64100000010040@At signアットマーク
65100000110141ACapital letter A大文字英字 A
66100001010242BCapital letter B大文字英字 B
67100001110343CCapital letter C大文字英字 C
68100010010444DCapital letter D大文字英字 D
69100010110545ECapital letter E大文字英字 E
70100011010646FCapital letter F大文字英字 F
71100011110747GCapital letter G大文字英字 G
72100100011048HCapital letter H大文字英字 H
73100100111149ICapital letter I大文字英字 I
7410010101124aJCapital letter J大文字英字 J
7510010111134bKCapital letter K大文字英字 K
7610011001144cLCapital letter L大文字英字 L
7710011011154dMCapital letter M大文字英字 M
7810011101164eNCapital letter N大文字英字 N
7910011111174fOCapital letter O大文字英字 O
80101000012050PCapital letter P大文字英字 P
81101000112151QCapital letter Q大文字英字 Q
82101001012252RCapital letter R大文字英字 R
83101001112353SCapital letter S大文字英字 S
84101010012454TCapital letter T大文字英字 T
85101010112555UCapital letter U大文字英字 U
86101011012656VCapital letter V大文字英字 V
87101011112757WCapital letter W大文字英字 W
88101100013058XCapital letter X大文字英字 X
89101100113159YCapital letter Y大文字英字 Y
9010110101325aZCapital letter Z大文字英字 Z
9110110111335b[square brackets or box brackets, opening bracket左大括弧、大括弧開く
9210111001345c\Backslash, reverse slashバックスラッシュ→円記号
9310111011355d]box brackets or square brackets, closing bracket右大括弧、大括弧閉じる
9410111101365e^Circumflex accent or Caretハット、やま
9510111111375f_underscore, understrike, underbar or low lineアンダーバー、アンダースコア
96110000014060`Grave accentバックオォート
97110000114161aLowercase letter a, minuscule a小文字英字 a
98110001014262bLowercase letter b, minuscule b小文字英字 b
99110001114363cLowercase letter c, minuscule c小文字英字 c
100110010014464dLowercase letter d, minuscule d小文字英字 d
101110010114565eLowercase letter e, minuscule e小文字英字 e
102110011014666fLowercase letter f, minuscule f小文字英字 f
103110011114767gLowercase letter g, minuscule g小文字英字 g
104110100015068hLowercase letter h, minuscule h小文字英字 h
105110100115169iLowercase letter i, minuscule i小文字英字 i
10611010101526ajLowercase letter j, minuscule j小文字英字 j
10711010111536bkLowercase letter k, minuscule k小文字英字 k
10811011001546clLowercase letter l, minuscule l小文字英字 l
10911011011556dmLowercase letter m, minuscule m小文字英字 m
11011011101566enLowercase letter n, minuscule n小文字英字 n
11111011111576foLowercase letter o, minuscule o小文字英字 o
112111000016070pLowercase letter p, minuscule p小文字英字 p
113111000116171qLowercase letter q, minuscule q小文字英字 q
114111001016272rLowercase letter r, minuscule r小文字英字 r
115111001116373sLowercase letter s, minuscule s小文字英字 s
116111010016474tLowercase letter t, minuscule t小文字英字 t
117111010116575uLowercase letter u, minuscule u小文字英字 u
118111011016676vLowercase letter v, minuscule v小文字英字 v
119111011116777wLowercase letter w, minuscule w小文字英字 w
120111100017078xLowercase letter x, minuscule x小文字英字 x
121111100117179yLowercase letter y, minuscule y小文字英字 y
12211110101727azLowercase letter z, minuscule z小文字英字 z
12311110111737b{braces or curly brackets, opening braces左中括弧、中括弧開く
12411111001747c|vertical-bar, vbar, vertical line or vertical slashパイプ、縦棒
12511111011757d}curly brackets or braces, closing curly brackets右中括弧、中括弧閉じる
12611111101767e~Tilde ; swung dashチルダ→オーバーライン
12711111111777fDELDelete削除

Table 3: ASCII 拡張 片仮名図形文字集合:

10進数 2進数 8進数 16進数 文字 説明
1281000000020080
1291000000120181
1301000001020282
1311000001120383
1321000010020484
1331000010120585
1341000011020686
1351000011120787
1361000100021088
1371000100121189
138100010102128a
139100010112138b
140100011002148c
141100011012158d
142100011102168e
143100011112178f
1441001000022090
1451001000122191
1461001001022292
1471001001122393
1481001010022494
1491001010122595
1501001011022696
1511001011122797
1521001100023098
1531001100123199
154100110102329a
155100110112339b
156100111002349c
157100111012359d
158100111102369e
159100111112379f
16010100000240a0
16110100001241a1半角カナ
16210100010242a2半角カナ
16310100011243a3半角カナ
16410100100244a4半角カナ
16510100101245a5半角カナ
16610100110246a6半角カナ
16710100111247a7半角カナ
16810101000250a8半角カナ
16910101001251a9半角カナ
17010101010252aa半角カナ
17110101011253ab半角カナ
17210101100254ac半角カナ
17310101101255ad半角カナ
17410101110256ae半角カナ
17510101111257af半角カナ
17610110000260b0半角カナ
17710110001261b1半角カナ
17810110010262b2半角カナ
17910110011263b3半角カナ
18010110100264b4半角カナ
18110110101265b5半角カナ
18210110110266b6半角カナ
18310110111267b7半角カナ
18410111000270b8半角カナ
18510111001271b9半角カナ
18610111010272ba半角カナ
18710111011273bb半角カナ
18810111100274bc半角カナ
18910111101275bd半角カナ
19010111110276be半角カナ
19110111111277bfソ半角カナ
19211000000300c0半角カナ
19311000001301c1半角カナ
19411000010302c2半角カナ
19511000011303c3半角カナ
19611000100304c4半角カナ
19711000101305c5半角カナ
19811000110306c6半角カナ
19911000111307c7半角カナ
20011001000310c8半角カナ
20111001001311c9半角カナ
20211001010312ca半角カナ
20311001011313cb半角カナ
20411001100314cc半角カナ
20511001101315cd半角カナ
20611001110316ce半角カナ
20711001111317cf半角カナ
20811010000320d0半角カナ
20911010001321d1半角カナ
21011010010322d2半角カナ
21111010011323d3半角カナ
21211010100324d4半角カナ
21311010101325d5半角カナ
21411010110326d6半角カナ
21511010111327d7半角カナ
21611011000330d8半角カナ
21711011001331d9半角カナ
21811011010332da半角カナ
21911011011333db半角カナ
22011011100334dc半角カナ
22111011101335dd半角カナ
22211011110336de半角カナ
22311011111337df
22411100000340e0
22511100001341e1
22611100010342e2
22711100011343e3
22811100100344e4
22911100101345e5
23011100110346e6
23111100111347e7
23211101000350e8
23311101001351e9
23411101010352ea
23511101011353eb
23611101100354ec
23711101101355ed
23811101110356ee
23911101111357ef
24011110000360f0
24111110001361f1
24211110010362f2
24311110011363f3
24411110100364f4
24511110101365f5
24611110110366f6
24711110111367f7
24811111000370f8
24911111001371f9
25011111010372fa
25111111011373fb
25211111100374fc
25311111101375fd
25411111110376fe
25511111111377ff

制御コードは、通信、プリンター、画面制御などに使用されます。

通信は、RS232C、RS422、RS485で通信手順ベーシック、HDLC、BSCなどでSTX,ETX,ENQ,EOT,ACK,NAK,SYNが使われていました。

制御コード使用例

Mosquitto

プリンター、画面では、ESCが使用され、プリンターなどESC/Pという制御があります。画面では、DOS画面、SSHなどのターミナルでも使用されています。

ドットプリンター..なつかし・・ESC @で初期化して・・用紙コマンド送って、、フィートして・・・windowsは、ドライバーがやってくれるから・・・

プログラムで変数に型があるやつとか

C言語など、数値タイプ、文字タイプがあるプログラミング言語では、重要かと・・

コンピュータでは、2進数ですべて、扱いされます。人間が分かりやすいように16進数表記が使用されます。

10101111とか1と0ばかりでは、わかりずらいですよね。

アセンブラでは、実際のコマンドは2進数ですが、それに合わせたニーモニックで表現されます。アセンブラのコマンドとか・・

上部表の下記はビットの並びになります。

16進数では上部 下部 4bit毎で管理すると便利です。


 b8 b7 b6 b5 b4 b3 b2 b1

2進数から16進に変換するには


 b8 b7 b6 b5 b4 b3 b2 b1
 8  4  2  1  8  4  2  1

1248を右から4bit毎に並べて,ビットが立っている(1)の部分を足し算して1-9まではそのまま、10-15までをA-Fに置き換えることで16進化できますよ。。しってるって?


 b8 b7 b6 b5 b4 b3 b2 b1
 0  1  0  1  0  1  1  0
 8  4  2  1  8  4  2  1

上記の場合、0x56でVという文字・・・

Vという文字は、10進数だと、86になります。

数値タイプだと86で

文字タイプだとVという表現になります。

C言語などでは、


65 + 1
'A' + 1
0x41 + 1

で文字タイプであれば、B、数値タイプであれば66

下記のように、大文字英字を小文字に置き換えします。


char i,j;
for(i=65;i < 91;i++) {
	j = i + 32;
	printf("%c",j);
}

下記のようにすれば。1-255までの文字コードを表示できます。

制御コードの部分はボケますよ・・・for(i=33;i < 127;i++)とかにするとかね。


char i;
for(i=1;i < 255;i++) {
	printf("%c",i);
}

下記のように表示部を変更すると10進、8進 16進、文字で表示できます。

printf( "%d:%o:%x:%c\n", i, i, i, i);

上記で、コンピュータ内部では同じ値で、言語の型によって分ける意味がすこしわかるかも・・ね。

あと、コンピュータへの記憶の決まりであって、画面に表示したり、キーボードで入力したりをこのコードを使用するという意味です。

画面に表示する場合は、9という文字であれば、2進数の00111001で記憶され、これをコードとして扱い。このコードとマッチしたフォントがあり、そのフォントイメージが画面に表示されます。

フォントのイメージ(実際とはことなりますよ。w)

このイメージを00111001を割付がされていて画面に表示することができます。

イメージとして画面ドットが1が立っている部分表示される感じです。。


0000000000000000
0001111111100000
0011110000111000
0011100000011100
0011100000011100
0011100000011100
0011100000011100
0001100000011100
0000110000111100
0000001111011100
0000000000011100
0000000000011100
0011100000011100
0011110000111000
0000111111100000
0000000000000000

まぁ。今時のアウトラインのフォントとかどうなってるか・・知りません・・w

ダンププログラム

文字コード把握するには・・ダンププログラムかと・・

久しぶりにCで書いた・・動くかなぁ・・あとPerlと同じようにつくってみたので・・

C言語で書いたダンプ


#include <stdio.h>
#include <string.h>
void main(int argc, char *argv[])
{
	char	*filename;
	FILE	*fp;
	int		pos = 0;
	int		chr;
	char	col1[256], col2[256];
	char	wk[50];
	char	one[2];
	memset(&col1 , 0x00 , sizeof(col1));
	memset(&col2 , 0x00 , sizeof(col2));
	filename = argv[1];
	fp = fopen(filename,"rb");
	while(fread(&chr, 1, 1, fp)) {
		if(pos && pos % 16 == 0){
			printf("%07X %s  %s\n",pos-16,col1, col2);
			memset(&col1 , 0x00 , sizeof(col1));
			memset(&col2 , 0x00 , sizeof(col2));
		}
		++pos;
		sprintf(wk," %02X", chr);
		strcat(col1,wk);
		if(chr < 0x20) {
			one[0] ='.';
		} else {
			one[0] = chr;
		}
		one[1] = 0x00;
		strcat(col2,one);
	}
	if(pos % 16) {
		printf("%07X %-48s  %s\n",pos-pos%16,col1, col2);
	}
	fclose(fp);
}

Perlで書いたダンプ


#!/usr/bin/perl
	my $filename = $ARGV[0];
	print "$filename\n";
	my $pos = 0;
	my $col1,$col2;
	my $chr;
	open(IN, $filename);
	while(read(IN, $chr, 1)) {
		if($pos && $pos % 16 == 0) {
			$col1 =~ tr/[a-f]/[A-F]/;
			printf "%07X %s  %s\n", $pos-16, $col1, $col2;
			($col1, $col2) = undef;
		}
		++$pos;
		$col1 .= " " . unpack("H2", $chr);
		$col2 .= (unpack("C", $chr) < 0x20) ? "." : $chr;
	}
	if($pos % 16) {
		$col1 =~ tr/[a-f]/[A-F]/;
		printf "%07X %-48s  %s\n", $pos - $pos % 16, $col1, $col2;
	}
	close(IN);

さいごに

だいぶ・・話がそれましたが・・・

では・・

関連記事