* 문자 집합(Charset)이란 컴퓨터에서 사용하는 문자들의 집합입니다. 그 집합들을 어떻게 모아두었느냐에 따라 이름을 정해주어야 구분해서 쓸 수 있겠지요. 문자집합의 이름으로는 유명한 ASCII, ISO8859, 유니코드 등이 있습니다.

 

* 인코딩은 해당 문자를 어떻게 코드화하겠느냐는 방식을 나타내며, 디코딩은 반대로 어떤 코드를 어떻게 문자화하겠느냐는 방식을 나타냅니다. 마찬가지로 방식에 대한 이름이 있어야 구분해서 사용할 수 있겠지요. 유니코드 인코딩, UTF, Base64, EUC-KR, CP949 등의 이름이 있습니다. 예상할 수 있듯이 문자 집합과 인코딩은 서로 뗄 수 없는 관계이기에 같은 이름이 많네요.

 

<아스키(ASCII)> - 최초의 문자집합이며 7bit를 사용합니다. ASCII라는 문자 집합을 구성하지 않고 컴퓨터를 개발했다면.. 정말 상상하기도 싫군요..

Ascii_Code_Table_Innosoft2021.pdf
0.38MB
The ASCII Code Table by Innosoft.kr

 

<ISO/IEC 8859>

  - 서유럽의 움라우트와 같은 특수 문자를 포함하기 위해 8bit를 사용하는 표준을 제정.

  - ASCII 부분을 유지하므로 당연히 ASCII와 호환됨.

 

<DBCS (Double-Byte Character Set>

  - 한글, 일어, 중국어 등 많은 문자가 필요로 하다보니 더이상 1byte로 표현불가하니 만들어 낸 문자집합.

  - ASCII 부분은 유지를 하고, 최상위 비트 0과 1로 확장 부분을 구분. 따라서 ASCII 호환됩니다.

  - 확장 부분은 2byte를 사용해서 문자를 구성합니다.

  - EUC-KR, CP949 등

 

<EUC-KR>의 문자 집합 00~7F (ASCII 호환)

  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0                                
10                                
20   ! " # $ % & ' ( ) * + , - . /
30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40 @ A B C D E F G H I J K L M N O
50 P Q R S T U V W X Y Z [ \ ] ^ _
60 ` a b c d e f g h i j k l m n o
70 p q r s t u v w x y z { | } ~  

<EUC-KR>의 문자 집합 B0A0~B0FF

  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B0A0  
B0B0
B0C0
B0D0
B0E0
B0F0  

위와 같이 정해진 위치에 확정된 글자가 명시되어 있으므로 "완성형"입니다. 해당하지 않는 문자를 표현할 수 없는 것이지요. 좀더 추가된 문자를 포함하여 만든 것이 CP949입니다. 마찬가지로 완성형이고, 포함되지 않는 문자는 표현할 수 없습니다.

 

"안녕Hello"라는 문자열은 총 4byte + 5byte = 9byte를 사용하게 됩니다.

 

 

<유니코드(Unicode)>

  - 위와 같이 언어별 인코딩이 다른 불편함을 해결하고자 ISO에서 동일한 규칙을 사용하도록 만든 문자집합입니다.

  - 유니코드 문자집합을 코드화하기 위한 인코딩에는 UTF-8, UTF-16, UTF-32등이 있습니다.

 

<UTF-8> 1byte~6byte 가변 문자 길이를 사용합니다. ASCII와 호환.

en.wikipedia.org/wiki/UTF-8

 

메모장에서 "안녕Hello"를 입력하고 UTF-8로 저장.

 

텍스트 파일을 Hexa Editor로 열어보기

 

앞의 3문자 "EF BB BF"는 UTF-8을 나타내는 BOM입니다. [아래에 설명]

"안"은 "EC 95 88", "녕"은 "EB 85 95", Hello는 "48 65 6C 6C 6F"임을 알 수 있습니다.

 

<UTF-8 인코딩 과정>

  - "안" = 0xEC 0x95 0x88 = 1110 1100   1001 0101   1000 1000

  - UTF-8 인코딩 테이블을 보면 U+0800 1110으로 시작하는 문자이고 3바이트를 사용하여 표현되고 있습니다.

  - U+0800에서 구분을 위하여 사용되는 "1110", "10", "10"을 제외한 나머지를 가지고 변환합니다.

  - 1110 1100   1001 0101   1000 1000 => 1100010101001000 => 0xC548

unicodemap.org/details/0xC548/

 

<UTF-16>

  - 2byte 또는 4byte를 고정으로 사용하기 때문에 ASCII와 호환되지 않습니다.

 

<BOM(Byte Order Mark)>

en.wikipedia.org/wiki/Byte_order_mark

UTF-16의 BE(Big Endian), LE(Little Endian)의 바이트 순서에 따라 바이트를 읽는 순서를 다르게 처리해주어야 합니다.

 

UTF-8은 Byte Order와 무관하여 "EF BB BF"를 저장하며 처리하는 프로그램도 있고(메모장같은), 처리하지 않는 프로그램도 있습니다. 그래서 Visual Studio나 웹페이지 개발시에 문서의 인코딩 에러가 가끔 나타나는 문제가 있지요. 각각의 프로그램에 맞게 BOM을 삭제하거나 추가하여 사용하면 문제를 해결할 수 있습니다.

 

 

아스키코드 테이블 The ASCII Code Table
https://ko.wikipedia.org/wiki/ASCII (위키백과-ASCII)

 

아스키코드 테이블입니다.

더이상의 아스키코드 테이블표는 필요없지 않을까 싶습니다!! ㅎㅎ

A4 인쇄하기 딱 좋게 제작하였습니다.

수정불가 다운로드 및 배포는 자유입니다.

 

The ASCII Code Table by Innosoft.kr

 

Ascii_Code_Table_Innosoft2021.jpg
1.42MB
Ascii_Code_Table_Innosoft2021.pdf
0.38MB

 

+ Recent posts