본문 바로가기

Academy I/IT

한글/유니코드 [Euc-KR, CP949, UTF-8]

[용어정리]


한글 - 완성형 코드 : 한글 한글자 한글자에 해당하는 코드표를 만들어 1:1 맴핑
                     하여 글자를 찾는 방식 (논리성 없음)

        전세계 문자가 한글처럼 과학적으로 만들어 지지 못하고
     그림형태로 만들어진 문자가 많기 때문.


한글 - 조합형 코드 : 논리적 코드생성

변환단계 1 - 기본 초성, 중성, 종성 코드표만을 사용하여 코드 검색

예) 장 
ㅈ 01110 +
ㅏ 00011 +
o 10111 +

변환 단계 2 : 01110(5bit) + 00011(5bit) + 10111(5bit) 합성( 총 15bit )
변환 단계 3 : 1+ 01110(5bit) + 00011(5bit) + 10111(5bit) 합성( 최종 총 16bit 생성)
변환 단계 2 제일 선두에 1 추가 해서 16bit (2byte) 문자코드 생성

한글학회 한글창시의 과학적 우수성을 살리기 위해 조합형이 한글 표준으로 
                채택되어야 한다고 주장. (순수 초성,중성,종성 의 조합법을 강조 )

한국인 입장에서는 맞는 말이지만 전세계 언어 규격화 입장에서 봤을때 
                한글만 예외를 둘 수 없어서 MS 는 한글 완성형 방식을 우선적으로 사용 


인코딩

       -문자를 컴퓨터에 저장하거나 통신으로 전송할 목적으로 부호화 하는 방법을 가리킨다.


유니코드란 ?

      우리는 흔히 유니코드라 함은 문자를 2byte 로 인코딩 하는 기법이라 알고 있다.

      아래 Euc-KR과 CP949 의 요약내용을 보면 알겠지만 이 둘은 모두 2byte 처리기법을
      사용하고 있다.

      그럼 과연 Euc-KR과 CP949 를 유니코드라 명명할 수 있는가?

      답은 안된다 이다. 이유는 다음과 같다.

      유니코드란 이름에서 알수 있듯 전세계 모든 문자를 하나의 코드표로 통합시킨 개념이다.
      즉, 유니코드 안에는 전세계 모든 언어의 문자가 들어 있어야 한다는 대 전제가 있다.

      하지만, Euc-KR 과 CP949 안에는 통상문자(영어, 특수문자) 와 한글 밖에는 없다.
      그러므로 Euc-KR 과 CP949 를 가지고 유니코드란 표현을 쓰면 안된다.

      그러므로 우리는 전세계 모든 문자를 표현 할 수 있는 인코딩인 UTF 를 유니코드라 할 수 있다.     

ACSII 인코딩

      -128 개의 문자코드 정리표로 오직 1byte 인코딩

      -영어, 통상 특수문자만 표현가능

      -한글 및 기타 외국어 표현 안됨


Euc-KR 인코딩 ( Extended Unix Code Page)

      -완성형 코드페이지

      -유닉스 계열의 코드페이지 

      -가변길이 방식의 영어, 특수문자, 한글, 일부한자 만 표현가능
  
       통상문자  (영어.특수문자)   일 경우 1 Byte KS X 1003 코드표 참조 (1Byte)
       한글                        일 경우 2 Byte KS X 1001 코드표 참조 (2Byte)

      - 2,350 자의 한글 표현 가능

      -ISO/IEC 2022 표준 
     

CP949  인코딩 ( Extended Windows Code Page )

       -확장 완성형 코드 페이지 / Euc-KR 과 호환 됨)
        완성형 코드표에 없는 한글 글자를 조합형으로 처리하는 로직을 가지고 있음

       -윈도우 계열의 코드 페이지 

       -가변길이 방식의 영어, 특수문자, 한글, 일부한자 만 표현가능

       통상문자  (영어.특수문자)   일 경우 1 Byte KS X 1003 코드표 참조 (1Byte)
       한글                        일 경우 2 Byte KS X 1001 코드표 참조 (2Byte)
       
       그외 조합형 병행 사용 

       11,172 자의 한글 표현 가능

       -Euc-KR보다 많은 한글 수 표현 가능

       -CP949 에서 Euc-KR 로 변환이 잘 안될 경우의 원인 :
CP949 가 Euc-kR 보다 더 많은 문자조합의 경우 수를 가지고 있기 때문

       -Euc-KR 를 따라한 개념으로 ISO/IEC 2022 표준 채택은 안되어 있음.

       -델파이 한글 표기에 사용


UTF-8 인코딩 (유니코드)
   
      -유닉스/윈도우 양쪽 계열 모두에서 사용되는 확장 완성형 코드 페이지 

      -전 [ 세계 모든 문자 코드 페이지 ] 포함

      -가변길이 문자 인코딩 방식
  
      -통상문자 (영어.특수문자)    일 경우 1Byte 사용
       ASCII 코드 1 Byte 로 표현 (그러므로 ASCII 코드는 UTF-8의 일부분이다.) 

      -Euc-KR 과 CP949 코드표와 호환성 없음

       UTF-8 내부 저장방식을 보면 

       한 문자를 표현/저장하기 위해 최소 1byte 에서 최대 4 byte 까지 동적으로 사용한다.
       (다른 문자는 다른 바이트 수로 표현 될 수 있다.)
       
      1Byte 의 최상위 4bit 에  문자기록에 사용되는 byte 수 기록

      문자기록에 필요한 byte 수가 1byte 일 경우 최상위 bit 는 0 으로 시작
      문자기록에 필요한 byte 수가 2byte 일 경우 최상위 bit 는 110  으로 시작
      문자기록에 필요한 byte 수가 3byte 일 경우 최상위 but 는 1110 으로 시작
      문자기록에 필요한 byte 수가 4byte 일 경우 최상위 but 는 1111 으로 시작

      ASCII 는 1byte 사용, 한글은 무조건 3byte 인코딩이다.

      즉 내부적으로 봤을때 유니코드는 무조건 2byte 처리란 말은 완전히 틀린 개념이다.
      이 말을 어느 누가 제일 먼저하고 전파시킨 지는모르겠으나 유니코드가 2byte 란 개념은
      완전히 잘못된 개념이니 지금 부터는 올바르게 이해하기 바란다.

      UTF-8 은 한글 문자에 무조건 2byte 코드표를 참조하는 Euc-KR 과 CP949 와는 완전히 다른 개념이다.

      -2014년 현재 1,114,112 개의 글자 표현 가능 ( 매년 지속적인 버젼업으로 글자수 추가중 )


UTF-16/UTF-32

UTF-8   A라는 문자표현을 0x41                  1Byte 로 표현함

UTF-16  A라는 문자표현을 0x0041/0x4100         2Byte 로 표현함
                (Little-Endian/Big-Endian 닭이 먼저냐 알이 먼저냐)

UTF-32  A라는 문자표현을 0x00000041/0x41000000 4byte 로 표현함
                (LE/BE 닭이 먼저냐 알이 먼져냐)

        컴파일러에 따라 Little-Endian 인지 Big-Endian 인지를 가리기 때문에
        이 옵션이 추가 된 것 같다.

        유니코드(Little-Endian)

        유니코드(Big-Endian)




[출처 : https://www.delmadang.com/community/bbs_view.asp?bbsNo=3&bbsCat=0&indx=453819&page=2]