(컴퓨터공학입문) 007. 문자 표현

문자 표현

컴퓨터는 영문 대문자 및 소문자, 숫자, 구두점, 특수 문자 등을 사용한다.

이런 문자들은 미리 약속된 코드 체계를 사용한다.

대표적인 코드 체계로 아스키(ASCII) 코드와 유니코드(Unicode)가 있다.

1. ASCII(American Standard Code for Information Interchange)

초창기엔 다양한 방법으로 문자를 표현하였다.

어떠한 방법으로 문자를 표현하든 컴퓨터 단말 내부에서만 사용되면 문제가 없지만, 다른 컴퓨터와의 작업시 호환성 문제가 발생한다.

이러한 호환성 문제를 해결하기 위해 ANSI에서 ASCII 표준 코드 체계를 발표하였다.

참고 ANSI는 American National Standards Institute, 미국 국립 표준 협회를 뜻한다.

ASCII는 각 문자를 7비트로 표현하므로 0000000부터 1111111까지 128개 만큼의 문자를 표현할 수 있었다.

아래는 ASCII 코드 테이블이다.

ASCII control characters

DEC OCT HEX BIN Symbol Description
0 000 00 00000000 NUL Null char
1 001 01 00000001 SOH Start of Heading
2 002 02 00000010 STX Start of Text
3 003 03 00000011 ETX End of Text
4 004 04 00000100 EOT End of Transmission
5 005 05 00000101 ENQ Enquiry
6 006 06 00000110 ACK Acknowledgment
7 007 07 00000111 BEL Bell
8 010 08 00001000 BS Back Space
9 011 09 00001001 HT Horizontal Tab
10 012 0A 00001010 LF Line Feed
11 013 0B 00001011 VT Vertical Tab
12 014 0C 00001100 FF Form Feed
13 015 0D 00001101 CR Carriage Return
14 016 0E 00001110 SO Shift Out / X-On
15 017 0F 00001111 SI Shift In / X-Off
16 020 10 00010000 DLE Data Line Escape
17 021 11 00010001 DC1 Device Control 1 (oft. XON)
18 022 12 00010010 DC2 Device Control 2
19 023 13 00010011 DC3 Device Control 3 (oft. XOFF)
20 024 14 00010100 DC4 Device Control 4
21 025 15 00010101 NAK Negative Acknowledgement
22 026 16 00010110 SYN Synchronous Idle
23 027 17 00010111 ETB End of Transmit Block
24 030 18 00011000 CAN Cancel
25 031 19 00011001 EM End of Medium
26 032 1A 00011010 SUB Substitute
27 033 1B 00011011 ESC Escape
28 034 1C 00011100 FS File Separator
29 035 1D 00011101 GS Group Separator
30 036 1E 00011110 RS Record Separator
31 037 1F 00011111 US Unit Separator
32 040 20 00100000 Space
33 041 21 00100001 ! Exclamation mark
34 042 22 00100010 Double quotes (or speech marks)
35 043 23 00100011 # Number
36 044 24 00100100 $ Dollar
37 045 25 00100101 % Per cent sign
38 046 26 00100110 & Ampersand
39 047 27 00100111 Single quote
40 050 28 00101000 ( Open parenthesis (or open bracket)
41 051 29 00101001 ) Close parenthesis (or close bracket)
42 052 2A 00101010 * Asterisk
43 053 2B 00101011 + Plus
44 054 2C 00101100 , Comma
45 055 2D 00101101 - Hyphen
46 056 2E 00101110 . Period, dot or full stop
47 057 2F 00101111 / Slash or divide
48 060 30 00110000 0 Zero
49 061 31 00110001 1 One
50 062 32 00110010 2 Two
51 063 33 00110011 3 Three
52 064 34 00110100 4 Four
53 065 35 00110101 5 Five
54 066 36 00110110 6 Six
55 067 37 00110111 7 Seven
56 070 38 00111000 8 Eight
57 071 39 00111001 9 Nine
58 072 3A 00111010 : Colon
59 073 3B 00111011 ; Semicolon
60 074 3C 00111100 < Less than (or open angled bracket)
61 075 3D 00111101 = Equals
62 076 3E 00111110 > Greater than (or close angled bracket)
63 077 3F 00111111 ? Question mark
64 100 40 01000000 @ At symbol
65 101 41 01000001 A Uppercase A
66 102 42 01000010 B Uppercase B
67 103 43 01000011 C Uppercase C
68 104 44 01000100 D Uppercase D
69 105 45 01000101 E Uppercase E
70 106 46 01000110 F Uppercase F
71 107 47 01000111 G Uppercase G
72 110 48 01001000 H Uppercase H
73 111 49 01001001 I Uppercase I
74 112 4A 01001010 J Uppercase J
75 113 4B 01001011 K Uppercase K
76 114 4C 01001100 L Uppercase L
77 115 4D 01001101 M Uppercase M
78 116 4E 01001110 N Uppercase N
79 117 4F 01001111 O Uppercase O
80 120 50 01010000 P Uppercase P
81 121 51 01010001 Q Uppercase Q
82 122 52 01010010 R Uppercase R
83 123 53 01010011 S Uppercase S
84 124 54 01010100 T Uppercase T
85 125 55 01010101 U Uppercase U
86 126 56 01010110 V Uppercase V
87 127 57 01010111 W Uppercase W
88 130 58 01011000 X Uppercase X
89 131 59 01011001 Y Uppercase Y
90 132 5A 01011010 Z Uppercase Z
91 133 5B 01011011 [ Opening bracket
92 134 5C 01011100 \ Backslash
93 135 5D 01011101 ] Closing bracket
94 136 5E 01011110 ^ Caret - circumflex
95 137 5F 01011111 _ Underscore
96 140 60 01100000 ` Grave accent
97 141 61 01100001 a Lowercase a
98 142 62 01100010 b Lowercase b
99 143 63 01100011 c Lowercase c
100 144 64 01100100 d Lowercase d
101 145 65 01100101 e Lowercase e
102 146 66 01100110 f Lowercase f
103 147 67 01100111 g Lowercase g
104 150 68 01101000 h Lowercase h
105 151 69 01101001 i Lowercase i
106 152 6A 01101010 j Lowercase j
107 153 6B 01101011 k Lowercase k
108 154 6C 01101100 l Lowercase l
109 155 6D 01101101 m Lowercase m
110 156 6E 01101110 n Lowercase n
111 157 6F 01101111 o Lowercase o
112 160 70 01110000 p Lowercase p
113 161 71 01110001 q Lowercase q
114 162 72 01110010 r Lowercase r
115 163 73 01110011 s Lowercase s
116 164 74 01110100 t Lowercase t
117 165 75 01110101 u Lowercase u
118 166 76 01110110 v Lowercase v
119 167 77 01110111 w Lowercase w
120 170 78 01111000 x Lowercase x
121 171 79 01111001 y Lowercase y
122 172 7A 01111010 z Lowercase z
123 173 7B 01111011 { Opening brace
124 174 7C 01111100
125 175 7D 01111101 } Closing brace
126 176 7E 01111110 ~ Equivalency sign - tilde
127 177 7F 01111111 DEL Delete

출처 ascii-code.com

그런데 이상한점이 있다.

ASCII는 0000000부터 1111111까지의 범위를 가진 7비트인데 위의 테이블은 8비트로 표현되어 있다.

이는 ASCII로 표현할 수 없는 추가적인 문자를 지원하기 위해 기존 7비트에 1을 추가하여 8비트로 확장하였기 때문이다.

기존 128개의 문자는 앞에 0이 붙어있다.

2. Unicode

ASCII를 확장한 8비트로 표현할 수 있는 문자는 총 256개이다.

당연히 모든 문자를 표현할 수 없기에 다른 표현 체계가 필요해지게 되었다.

이때 각 나라의 언어를 모두 표현하기 위해 유니코드 체계가 발표되었다.

유니코드는 사용중인 운영체제, 프로그램, 언어에 상관없이 모든 문자마다 고유한 코드값을 부여한다.

언어와 상관없이 모든 문자를 16비트로 표현하기에 최대 65,536개의 문자를 표현할 수 있다.

이 유니코드 표준은 애플, 마이크로소프트, HP, IBM 등의 업계에서 채택되었다.

한글의 경우

AC00의 ‘가’부터 D7A3까지 총 11,172자를 표현하고 있다.

참고 초성 19개 * 중성 21개 * 종성 28개를 곱한 값이다.

유니코드에 정의된 한글 리스트는 아래 출처에서 확인할 수 있다.

출처 The Unicode Standard v14.0 - Hangul Syllables