2017년 1월 20일 금요일

ASCII(아스키) 코드 이해하기

미국정보교환표준부호(American Standard Code for Information Interchange; ASCII) : 1967년 표준 제정, 1986년 마지막 개정

이 코드를 이해하려면 먼저 타자기 시대를 이해해야 한다. 년도를 보면 타자기를 사용하던 시절에 제정하여, 컴퓨터 화면 출력 시절에 마지막 개정을 한다. 타자기인데 사람이 치는 것이 아니라 기계가 통신을 해서 자동으로 치는 타자기이다. 그래서 제어 명령(통신에 필요한 명령 + 타자기를 움직이는 명령)이 함께 들어 있다. 컴퓨터와 프린터도 이 아스키 코드로 통신할 수 있다. 프린터는 자동 타자기에 해당한다.


이진법
십육진법
십진법
약자
설명이 아닌 이름
엉터리 설명에 대한 추측
000 0000
00
0
NUL
Null Character
공백 문자(문자가 아니라 그냥 없음 표시)
000 0001
01
1
SOH
Start of Header
헤더 시작
000 0010
02
2
STX
Start of Text
본문 시작 & 헤더 종료
000 0011
03
3
ETX
End of Text
본문 종료
000 0100
04
4
EOT
End of Transmission
전송 종료 & 통신 초기화
000 0101
05
5
ENQ
Enquiry
응답하라!
000 0110
06
6
ACK
Acknowledgment
긍정응답 = OK/Yes/그렇다!
000 0111
07
7
BEL
Bell
경고음(삐~)
000 1000
08
8
BS
Backspace
백스페이스 = 커서 좌측 이동
000 1001
09
9
HT
Horizontal Tab
수평 탭 = 커서 우측 몇 칸 이동
000 1010
0A
10
LF
Line feed
개행 = 종이 한 줄 정도 올리기
000 1011
0B
11
VT
Vertical Tab
수직 탭 = 커서 아래 몇 칸 이동
000 1100
0C
12
FF
Form feed
다음 페이지 = 종이 넘기기
000 1101
0D
13
CR
Carriage return
복귀 = 커서 좌측 끝으로 이동
000 1110
0E
14
SO
Shift Out
확장문자(외국문자/그림문자) 시작
000 1111
0F
15
SI
Shift In
확장문자(외국문자/그림문자) 종료
001 0000
10
16
DLE
Data Link Escape
전송 제어 확장(탈출? 다른 방식으로 통신?)
001 0001
11
17
DC1
Device Control 1
장치 제어 1 (다른 장치가 있다면)
001 0010
12
18
DC2
Device Control 2
장치 제어 2
001 0011
13
19
DC3
Device Control 3
장치 제어 3
001 0100
14
20
DC4
Device Control 4
장치 제어 4
001 0101
15
21
NAK
Negative Acknowledgement
부정응답 = NG/No/아니다!
001 0110
16
22
SYN
Synchronous idle
동기 = 상대와 대화하기 위해 기다림?
001 0111
17
23
ETB
End of Transmission Block
전송블록 종료
001 1000
18
24
CAN
Cancel
무시 = 방금 전송한 것 무시해라?
001 1001
19
25
EM
End of Medium
매체 종료(중간 종료?)
001 1010
1A
26
SUB
Substitute
치환 = 잘 못 전송한 것 대체?
001 1011
1B
27
ESC
Escape
제어기능 추가(탈출? 다른 제어 명령 사용?)
001 1100
1C
28
FS
File Separator
파일경계 할당 = 파일 구분자
001 1101
1D
29
GS
Group Separator
레코드 그룹 경계 할당 = 그룹 구분자
001 1110
1E
30
RS
Record Separator
레코드 경계 할당 = 레코드 구분자
001 1111
1F
31
US
Unit Separator
장치 경계 할당(단위 구분자?)
이 구간은 화면에 표시 가능한 문자
알파벳 + 숫자 + 기호
111 1111
7F
127
DEL
Delete
삭제 = 잘 못 전송한 것 삭제?


위에서 보통 Null이라고 하면 정말 아무 것도 없는 것을 말한다. 즉, 숫자 0도 아니고 문자 공백도 아니라 정말 무(無)이다. 

1~6은 통신에 관한 것이다. 통신 시작한다. 끝낸다. 응답하라. 그런 내용이다.

7~15은 타자기를 제어하는 명령이다. 소리를 내거나. 문자를 두드리는 타자기 머리(케리지, 컴퓨터에선 커서)와 종이 넘기는 바퀴를 제어하는 것이다. 머리를 좌우로 한 칸 움직이거나 종이를 한 줄, 한 페이지 넘기는 것 등이다. 고로 컴퓨터에서 Enter는 LF+CR = CR+LF 조합이다.

16~20은 뭔가 다른 기계 장치가 연결 되어 있으면 그걸 제어하려는 명령이다. Escape는 탈출을 의미한다. 보통 무조건 빠져나가는 것을 의미한다. 헌데 이걸 중간에 다른 명령 삽입이라고 해석할 수도 있다. 보통 이런 코드 바로 뒤에 오는 코드는 다른 의미로 해석한다.

21~31, 127은 나중에 추가한 것 같다. 왜냐하면 보통 짝을 지어 나타나는 것들은 함께 제정한 것인데 나중에 추가한 것들은 땜질을 한 것이라 위치가 추가한 순서가 된다. 뭔가 통신 장애에 대한 대책과 메모리 기능이 있는 장치(프린터)에서만 통하는 명령이다. 이미 종이에 찍은 것을 취소하거나 지울 수는 없기 때문이다. 프린터는 자체 메모리가 있어 내용을 적당히 받은 후에 출력을 한다.


2진법
십육진법
십진법
모양
010 0000
20
32
공백
010 0001
21
33
!
010 0010
22
34
"
010 0011
23
35
#
010 0100
24
36
$
010 0101
25
37
%
010 0110
26
38
&
010 0111
27
39
'
010 1000
28
40
(
010 1001
29
41
)
010 1010
2A
42
*
010 1011
2B
43
+
010 1100
2C
44
,
010 1101
2D
45
-
010 1110
2E
46
.
010 1111
2F
47
/
011 0000
30
48
0
011 0001
31
49
1
011 0010
32
50
2
011 0011
33
51
3
011 0100
34
52
4
011 0101
35
53
5
011 0110
36
54
6
011 0111
37
55
7
011 1000
38
56
8
011 1001
39
57
9
011 1010
3A
58
:
011 1011
3B
59
;
011 1100
3C
60
<
011 1101
3D
61
=
011 1110
3E
62
>
011 1111
3F
63
?
100 0000
40
64
@
100 0001
41
65
A
100 0010
42
66
B
100 0011
43
67
C
100 0100
44
68
D
100 0101
45
69
E
100 0110
46
70
F
100 0111
47
71
G
100 1000
48
72
H
100 1001
49
73
I
100 1010
4A
74
J
100 1011
4B
75
K
100 1100
4C
76
L
100 1101
4D
77
M
100 1110
4E
78
N
100 1111
4F
79
O
101 0000
50
80
P
101 0001
51
81
Q
101 0010
52
82
R
101 0011
53
83
S
101 0100
54
84
T
101 0101
55
85
U
101 0110
56
86
V
101 0111
57
87
W
101 1000
58
88
X
101 1001
59
89
Y
101 1010
5A
90
Z
101 1011
5B
91
[
101 1100
5C
92
\
101 1101
5D
93
]
101 1110
5E
94
^
101 1111
5F
95
_
110 0000
60
96
`
110 0001
61
97
a
110 0010
62
98
b
110 0011
63
99
c
110 0100
64
100
d
110 0101
65
101
e
110 0110
66
102
f
110 0111
67
103
g
110 1000
68
104
h
110 1001
69
105
i
110 1010
6A
106
j
110 1011
6B
107
k
110 1100
6C
108
l
110 1101
6D
109
m
110 1110
6E
110
n
110 1111
6F
111
o
111 0000
70
112
p
111 0001
71
113
q
111 0010
72
114
r
111 0011
73
115
s
111 0100
74
116
t
111 0101
75
117
u
111 0110
76
118
v
111 0111
77
119
w
111 1000
78
120
x
111 1001
79
121
y
111 1010
7A
122
z
111 1011
7B
123
{
111 1100
7C
124
|
111 1101
7D
125
}
111 1110
7E
126
~


위의 코드는 종이에(모니터 화면에, 프린터에) 출력할 수 있는 문자이다. 로마 알파벳이 지금의 영어 알파벳의 원조인데 미국에서 만든 표준이라 다른 유럽 언어는 표현할 수 없다. 컴퓨터는 미국에서 먼저 만들었으니 할 수 없다. 그래서 유럽 (8비트로 확장) → 일본(16비트로 확장) → 한국(일본 모방) 등 자기 문자를 표현하려는 노력이 있었다.

아스키와 호환성을 유지하려고 제어 문자를 피하다 보니 코드가 꼬이고 지저분해졌다. 그래서 새로 깔끔하게 세계 문자코드를 만들자는 것이 유니코드인데 인터넷 통신에선 아스키와의 호환성 유지를 하려고 다시 지저분한 버전(UTF-8)을 만들어 사용하고 있다. 컴퓨터 내부에서 처리만 하려면 깔끔한 버전(UTF-16)을 사용하는 게 좋다.




한국은 법은 잘 만들었는데 사람이 지키지 않는다고 한다. 내 생각엔 개소리다.
기계는 잘 못 만들면 제대로 동작하지 않는다. 법도 마찬가지다.
대체로 법을 만드는 사람들은 두루뭉술하고 애매모호하게 만든다. 개구멍이 있다.
그래서 법을 코에 걸면 코걸이 귀에 걸면 귀걸이라고 한다.
정신 나간 대통령 탄핵도 못 하는 나라다. 판사 필요 없으니 배심원제 하자.

댓글 없음:

댓글 쓰기