• 문자셋(Character set) : 문자 코드 집합
  • 인코딩(Encoding) : 문자 코드 집합을 표현하는 방법 → 인코딩 방법은 문자셋에 종속적임

1. 인코딩(Encoding)

  • 컴퓨터 안에서는 문자든 숫자든 모두 숫자(‘01010001110011…’)로 나타냄
  • 일반적으로 우리가 사용하는 언어(텍스트)를 기계가 이해하는 언어로 표현하는 방법을 인코딩(encoding)
  • ASCII 코드는 미국에서 만든 최초의 문자열 인코딩 방법
    1. 대문자 A → 65로 ASCII 코드 표시
    2. 소문자 a → 97로 ASCII 코드 표시
  • 영어, 중국어, 프랑스어 등 많은 언어마다 인코딩의 방법이 다름
  • 한글을 기계가 이해시키는 인코딩 방법 → 여러개가 있는데 그 중 가장 많이 사용되는 것이 CP949와 UTF-8(Unicode).


2. ksc5601과 cp949

  • ksc5601과 cp949은 문자셋이기는하나, 각각 조금은 다른 인코딩 방법

2.1. ksc5601

  • 92년도에 국가에서 정의한 표준으로 2바이트를 사용
  • 한글 2,350자 표현 가능
  • 전각문자/기호/자소/선문자 0xA180 ~ 0xAFFF
  • 한글영역 0xB0A1 ~ 0xC9FF
  • 한자영역 0xCA80 ~ 0xFDFF

2.2. cp949

  • cp949는 윈도95에 마이크로소프트가 독자적으로 제정한 규격
  • 한글 11,172자 표현 가능
  • cp949 인코딩은 확장된 euc-kr임 → 기존의 euc-kr에 추가적으로 지원하는 문자셋을 덧붙인 형태
  • 현재는 윈도우가 유니코드도 지원하며, 요즘 개발되는 윈도우는 유니코드를 베이스 사용

2.3. windows, linux, java, web 정리 → 최근은 Unicode를 사용하기에 큰 의미는 없지만 혹시나 정리

  • html 문서에 charset=cp949 등으로 지정된 웹페이지가 있기는 한데, 이것은 엄연히 표준을 위반
  • W3C에서는 IANA에서 공인된 문자셋만을 표준 → CP949 혹은 MS949은 포함 X
  • java에서 ksc5601가 cp949로 표시되는 지 모름, cp949는 또 ms949로 표현
  • 윈도우는 CP949방식을 사용
  • 윈도우를 개발한 마이크로 소프트에서 EUC-KR 방식에서 확장 → MS949



3. 유니코드(Unicode)

3.1. 한글의 문자 집합

  • 문자를 표현하기 위해서 가장 먼저 ‘문자 집합’을 정의 필요
  • 문자 집합은 표현해야 할 문자를 정하고 순서를 지정
  • 예시
    1. 한글 표현 방법 중 조합형 : 한글의 원리에 기반하여 초성, 중성, 종성에 각각 코드를 할당하는 방식
    2. 한글 표현 방법 중 완성형 : ‘가’,’각’,’간’과같이 완성된 문자에 코드를 할당하는 방식으로, 한글 표준안
    3. 영어: ‘A’ ~ ‘z’ (대문자에서 소문자까지)
    4. CCS(coded character set) : 문자 집합을 행렬로 표기한 형태
    5. CES(character encoding scheme) : 문자 집합을 컴퓨터에 저장하기 위해서 8비트 단위 형태로 표현한 인코딩 방식

3.2. 유니코드

  • 각 나라 언어에는 컴퓨터에서 해당 언어를 표현할 수 있는 독자적인 문자 집합이 있음
  • 하나의 문자 집합을 사용하는 문서에서는 다개국어를 동시에 표현 X
  • 유럽어의 문자도 마찬가지로 같은 문자지만 문자집합에 따라 코드가 다름
  • 전 세계적으로 사용되는 모든 문자 집합을 하나로 모아 탄생시킨 것이 유니코드.

3.3. 유니코드 인코딩 방식

  • 문자 인코딩은 문자들의 집합을 부호화(정보의 형태나 형식을 변환하는 처리)하는 방법
  • 유니코드의 인코딩 방식
  • 코드 포인트를 코드화한 UCS-2와 UCS-4
  • 변환 인코딩 형식(UTF, UCS Transformation Format)인 UTF-7, UTF-8, UTF-16, UTF-32
  • 위 인코딩 방식 중에 ASCII와 호환이 가능하면서 유니코드를 표현할 수 있는 UTF-8 인코딩이 가장 많이 사용

3.4. 코드포인트

  • 유니코드의 값을 나타내기위해서는 코드포인트를 사용 → 보통 U+를 붙여 표시
  • A의 유니코드 값 표기 방법 (아래 2가지 중 1가지 방법으로 표시)
    1. U+0041
    2. \u0041
  • U+1100~U+11FF 사이에 한글 자모 영역
  • U+AC00~U+D7AF 사이에 한글 소리 마디 영역

3.5. 유니코드 범위 목록에서 한글 관련 범위

3.6. 한글표현의 대표적 두 개의 코드영역

  • 한글 소리 마디와 한글자모, 한글 자모 확장 이렇게 두 개의 코드 영역이 있다는 것은 같은 글자를 표현하는 서로 다른 두 개의 방법이 있음
  • 같은 ‘가’의 글자여도, 표현법에 따라 코드 값이 다름
  • 한글 자모, 한글 자모 확장
    • 초성/종성을 구별하는 자음과 모음으로 구성
    • 완성(조합 전) 문자 하나하나에 코드 매칭
    • 이를 이용하여 조합형 한글을 표현할 수 있음
    • 한글 자모 영역에는 옛한글에서만 사용된 초성, 중성, 종성이 있으므로, 옛한글을 표현할 수 있음
    • U+1100부터 U+115E까지는 초성, U+1161부터 U+11A7까지는 중성, U+11A8부터 U+11FF까지는 종성

3.7. 유니코드 정규화(Unicode equivalence)

  • 유니코드 정규화(Unicode equivalence)란 연속적인 코드를 사용하여 표현한 어떤 글자를 처리하는 방법
  • 프로그래밍 언어의 유니코드 정규화 기능을 사용하여 문자열을 분석 가능
  • 다양한 인코딩 방식이 있기에 환경에 따라서 다른 인코딩을 만날 수 있음
  • 웹의 경우에 어딘가에서 한글이 깨진다면, 그 이유는 브라우저 인코딩 값과 서버 인코딩 값이 다른 이유
  • 웹에서 여러 인코딩을 지원하려면, 인코딩된 URL 문자열과 사용한 인코딩 정보를 파라미터로 전달

4. 인코딩 간의 문제점 → 인코딩방식에 따라 표기할 수 있는 관계

  • 완성형 중에서 EUC-KR의 경우, 빠져있는 문자가 있어 모든 문자를 표현 불가능 → 웹을 사용하지 않는 윈도우 환경에서는 불편함 X
  • 확장 완성형인 CP949의 경우에는 유니코드(UTF-8)에서 표현할 수 있는 모든 문자를 표현 가능
  • 웹에서의 UTF-8이면 UTF-8, EUC-KR이면 EUC-KR끼리 밖에 제대로 표현 X →각종 웹 소스들을 사용할 때 인코딩 부분 해결해야함
  • 웹에서 인코딩을 변환하도록 하는 함수도 있고, 서버 자체의 인코딩을 바꾸는 방법도 있음
  • 환경마다 가지고 있는 문제들이 제각각이기 때문에, 한글 부분에 문제가 발생하면 인코딩을 먼저 확인 필요

+ Recent posts