본문 바로가기
IT/IT 지식

캐릭터셋 Character set 인코딩 한글표현

by SidePower 2020. 10. 5.

 

프로그래머라면 기본적으로 알고 있어야 하는 게 캐릭터셋 입니다.

 

세세하게 모든 걸 알 필요는 없지만 특징 정도는 알고 있어야

이기종 간에 데이터 전환 시 융통성 있게 할 수 있습니다.

저도 개발하면서 잘 적용해서 쓰다가 몇 달 딴일 하면서 잊고 있다가

필요하면 또 찾아보고 또또.. 반복하더라고요. ^^;;

 

인터넷보다 보면 한글이 깨진다는 얘기 많이 들어보셨죠..^^;;

우리의 소중한 유산입니다.  깨지 말아 주세요. ㅋ

 

 

 

■ ASCII 

American Standard Code for Information Interchange

컴퓨터 생긴 이후 최초의 캐릭터셋입니다. 

 

7bit로 구성되어 2^7승 계산하면 128개의 문자를 표현할 수 있습니다.

알파벳 대. 소문자 합쳐서 54개, 숫자 0~9까지 10개 , 나머지 특수문자들..로

구성되어 있습니다.

 

모든 캐릭터셋은 기본적으로 ASCII 가 포함되어

영문, 숫자 등 128개는 ASCII 코그 값 그대로 사용됩니다.

 

 

ANSI 

미국 국립 표준 협회(American National Standards Institute, ANSI)인데요.

ANSI라는 동일한 이름으로 캐릭터셋도 있습니다.

주로 ANSI Code Page라고 표현합니다.

 

8bit로 구성되어 2^8 계산되어 256개의 문자를 표현할 수 있습니다.

7bit는 ASCII를 그대로 가져와서 동일합니다.

나머지 1bit가 Code Page를 구성하기 위해 추가되었습니다.

 

ASCII 128개 문자의 부족함을 채우기 위해

여러 개의 코드표를 만들어 그 코드표를 매핑하기 위해 1bit를 사용합니다.

ANSI를 보시면 영문 ANSI , 한글 ANSI , 중국 ANSI 등..

나라별로 다른 Code Page가 있는 걸 알 수 있습니다.

설치된 ANSI Code Page와 사용하는 Code Page 가 다르면

원치 않는 문자가 나오게 됩니다.

 

 

ISO-8859 

알파벳 국가들은 대부분 ASCII로 사용하는데요,

유럽 쪽은 악센트 부호 Ó, Ú, Ý; ð, 나 유료화 기호 € 등 특수문자들이 많아서

ASCII + 1bit = 8bit의 ASCII 확장 캐릭터셋을 만들었습니다. 

바로 유럽 통합 표준안으로 ISO-8859 가 결정되고

또 서유럽은 ISO-8859-1로 동유럽은 ISO-8859-2로 제정되었습니다.

 

 

조합형과 완성형 

한국과 중국, 일본은 한글, 한자, 히라가나, 부호와 특수문자들이 많아서

ASCII 확장 256 문자로는 많이 부족해서 각각 나라별로 따지 만들어졌습니다.

조합형은 한글 표기법 그대로 초성+중성+종성을 조합해서 만든 거예요.

ㄱ + ㅜ + ㅅ 각각의 코드와 문자를 합쳐 "굿"을 조합하는 거예요.

글자 하나를 표현하는데 코드가 3개 (3 byte) 필요입니다. 

완성형은 글자 하나에 코드 한 개로 1:1로 만든 거예요.

굿 글자 하나에 코드 하나(1 byte)입니다.

현재 조합형은 쓰지 않고 완성형만 사용하고 있습니다.

제 생각에도 우리나라는 모든 글자를 만들 수 있는 조합형이 맞는 거 같은데요.

아쉽네요.^^;;

 

 

KSC 5601 : 1987 

정부에서 표준으로 제정했습니다.

2byte로 구성된 완성형 캐릭터셋으로 한글 2,350 글자 지원합니다.

그 당시 2,350 개의 한글만으로 모든 표현이 가능하다고 판단했다고 합니다.

 

 

KSC 5601 : 1992 

2byte 완성형 한글 캐릭터셋입니다.

2,350 개의 한글로 표현의 부족한 현상이 사회적으로 발생하면서

기존 2,350 개의 완성형 한글에 94개의 조합형 한글을 추가해서

KSC 5601 : 1992가 제정되었습니다.

 

 

KSX 1001 

KSC 5601 이름을 바꿔서 KSX 1001이 되었습니다.

KSX 1001 : 2004 가 최신 규격입니다.

2byte 완성형 한글 캐릭터셋입니다.

2,350 개의 한글을 포함해서 8,836 개의  문자를 표현할 수 있습니다.

한글은 KSC 5601:1992로만 지정됩니다.

 

 

KSX 1003 

KSC 5636 이름을 바꿔서 KSX 1003이 되었습니다.

로마자 문자 집합과 ASCII에서 역슬래쉬(\)를 원(\)으로 표기.

KSX 1003 : 2003 이 최신 규격입니다.

 

 

EUC-KR 

Extend UNIX Code 약자로 유닉스에서 영문자 외에 한글 표현을 위한

확장형 캐릭터셋입니다.

 

2byte 완성형 한글 캐릭터셋입니다.

KSX 1001 + KSX 1003을 합친 인코딩입니다.

2,350 개의 한글만 표현 가능해서 현재

현재도 많이들 사용하시지만 2,350 개의 한글만 가능해서 

서서히 MS949로 갈아타고 있는 분위기입니다.

 

 

CP949 (=CodePage 949) 

MicroSoft사에서 만든 한글 캐릭터셋으로 window-949

또는 MS949로 불립니다.

 

2byte 완성형으로 EUC-KR의 확장판입니다.

EUC-KR의 한글 2,350 + 8,000 자리 문자 추가되었습니다.

요즘 기본 캐릭터셋을 MS949로 많이 사용하고 있는 추세입니다.

 

참고로

JAVA(자바)에서 CP949는 EUC-KR를 지칭합니다.^^;;
그리고 확장판이라고 하지만 EUC-KR만 지원하는 곳에서는

충돌이 발생할 수 있습니다.

 

 

UNICODE 

전 세계의 모든 문자를 표현하기 위해

유니코드 컨소시엄(Unicode Consortium)에서 설계된 캐릭터셋입니다.

 

전 세계를 대상으로 문자를 모아 지정하다 보니 1991년 최초 유니코드 1.0 발표 이후

수년 뒤에 유니코드 2.0 때 현대 한글 11,172자가 모두 기제 되었습니다.

 

 

UTF-8 

유니코드에 지정된 문자를 사용하기 위한 인코딩 방식 중에 한 가지입니다.

1~4byte 가변 길이 인코딩 방식입니다.

 

UTF-7 UTF-8 UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE

종류가 많은데요 우리나라에서 주로 UTF-8을 사용합니다.

 

UTF- 뒤로 숫자 7,8,16,32는 유니코드 문자 표에서 글자의 인덱스 값을 표현할 때

7 bit , 8 bit , 16 bit , 32 bit 할지 지정하는 방식을 말합니다.

한글은 3 byte로 지정됩니다.

 

요즘 리눅스나 웹사이트는 거의 UTF-8이라고 생각하시면 될 거예요.

 

한글은 

두가지 캐릭터셋 체계로 나눠져 있습니다.

 

첫번째는

KSC 5601 > KSX 1001 > EUC-KR > MS949(=CP949)

KSC 5601를 기준으로 계속 글자수가 추가되면서 MS949까지 왔습니다.

위 순서대로 표현 가능한 한글이 많으며

추가된 한글은 이전 단계의 캐릭터셋에서는 해석할수 없습니다. ^^;;

"샾","똠" 은 MS949에서는 표현되는데 EUC-KR에서는 깨져 보이는 이유입니다.

하지만 대부분의 한글은 모두 같은 코드값을 가지고 있어 호환이 됩니다.

 

두번째는

UTF-8(유니코드)로 새로운 코드체계라서 EUC-KR , MS949와 호환되지 않습니다.

한글 표현 시 EUC-KR, MS949는 2 byte를 사용하고

UTF-8은 3 byte를 사용합니다.

 

프로그램 중에 또는 데이터 전송했는데 한글이 깨진다는 글들이 많던데요.

대부분 한글 깨지는 원인은 초기 데이터를 만드는 서버의 캐릭터셋과

데이터를 받은 서버의 캐릭터셋이 다르기 때문입니다.

송신 쪽에서는 MS949로 샾, 똠 글자가 섞인 데이터 보냈는데

수신 쪽에서는 EUC-KR로 해석하니깐 샾, 똠 등 글자가 깨져 보입니다.

양쪽 캐릭터셋을 동일하게 맞추면 한글이 잘 보일 거예요.

 

C언어는 iconv 함수로

또 JAVA는 String 객체를 통해 서로 다른 캐릭터셋으로 

자유롭게 변환 가능합니다.

 

감사합니다.

반응형

'IT > IT 지식' 카테고리의 다른 글

SATA1 SATA2 SATA3 차이점  (0) 2020.10.08
컴퓨터 비트 바이트 이해하기 계산하기  (0) 2020.10.06
IT 정보보호 인식수준  (0) 2020.09.26
쿠팡파트너스 가입하기  (0) 2020.09.21
정규표현식 특수문자 의미  (0) 2020.09.19

댓글