'인코딩'에 해당되는 글 1건

  1. 2009.08.14 인코딩 by 대절님

인코딩

programing/ETC 2009.08.14 12:22

인코딩

 

-문자인코딩 : 문자들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법.

문자집합 또는 문자셋은 정보를 포현하기 위한 글자들의 집합을 정의한 것으로, 직접적으로 사용되지 않을 수도 있고 한 문자 집합을 여러 문자 인코딩에서 쓸수도 있다. 특히 집합 안의 문자들에 음수가 아닌 정수들을 배정한 것을 부호화된 문자집합 이라 한다. 문자 집합은 ASCII와 같이 더 이상의 문자가 추가될수 없기도 하고, 유니코드와 같이 문자가 계속 추가될 수 있기도 하다.

 

-문자인코딩 형태 : 특정한 문자 집합 안의 문자들을 컴퓨터 시스템에서 사용할 목적으로 일정한 범위안의 정수들로 변환하는 방법이다. 여기에는 유니코드 코드포인트를 8비트 숫자의 집합으로 나타내는 UTF-8이나, 16비트 숫자의 집합으로 나타내는 UTF-16, 그리고 대부분의 일반적인 문자인코딩들이 포함된다.

 

-한글 완성형 인코딩 : 한글을 그 구조와 관계 없이 코드를 배당하여 표현하는 문자 인코딩들을 총칭하는 말이며, 흔히 한글 조합형 인코딩과 비교된다.

 

-7비트 완성형 : 청계천 주변 상가에서 만들어져 보급되었기 떄문에 흔히 청계천 한글이라고도 불리고 , 그 구조에 따라 7X2 한글 이라고도 불린다. 최상위 비트를 사용할수 없는 영문 프로그램들에서 사용하기 위하여 만들어졌으며, 로마자 소문자 뒤에 대문자가 오거나 $등의 특수문자 뒤에 로마자가 오는 등 일반적으로 사용되지 않는 조합에 자주 사용되는 한글을 배열한 것이다. 이방법을 구현하는 한글 카드가저렴했기 때문에 애용되었지만, 표현할 수 있는 글자 수가 1300여자로 제한되고 영문이 한글로 표시되는 경우도 종종 있었다.

 

-2바이트 완성형 : 현재 KS X 1001 EUC-KR 로 표준화되어 사용되고 있는 문자 집합 및 인코딩이다.  ISO/IEC 2022와의 호환성 때문에 94X94문자 집합을 선택했으며, 결과적으로 2350자만의 한글을 완성된 형태로 지원하게 되어서 많은 논란을 낳았다.

 

*EUC-KR

EUC-KR KS X 1001 KS X 1003을 사용하는 8비트 문자 인코딩으로, EUC의 일종이며 대표적인 한글 완성형 인코딩이기 때문에 보통 완성형이라고 불린다.

각 글자는 행과 열에 128을 더한 코드값을 사용하여 2바이트로 표현된다.따라서 KS X 1001 40-27에 배당된 라는 글자는 EUC-KR에서 CO A7라는 바이트 열로 표현된다.

KS X 1001에는 한글 채움 문자를 사용하여 규격의 문자 집합에 포함되지 않은 한글을 표현하는 확장 방법이 있지만, 대부분의 경우 이 방법은 EUC-KR에서 사용되지 않고 대신 CP949와 같은 다른 방법을 사용하여 KS X 1001바깥의 현대 한글을 표현한다.

 

*Cp949

코드 페이지 949(CP949)는 마이크로소프트 한글 윈도우에서 사용되는 코드페이지이다. 본래는 KS C 5601의 완성형 한글을 표현한 코드페이지였으나, 윈도95부터는 확장 완성형 혹은 통합형 한글 코드이라는 명칭으로 확장되어 모든 현대 한글을 수용하게 되었다. 마이크로소프트에서는 이 인코딩을 기반 문자 집합 이름인’ks_c_5601-1984’로 사용하고 있다. EUC-KR의 확장이며, 하위 호환성이 있다. 각 글자는 행과 열에 128을 더한 코드값을 사용하여 2바이트로 표현된다.

 

*UTF-8

UTF-8은 유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나. UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지를 사용한다. UTF-16 UTF-8중 어느 인코딩이 더 적은 바이트를 사용하는지는 문자열에서 사용된 코드 포인트에 따라 달라지며, 실제로 DEFLATE와 같은 일반적인 압축 알고리즘을 사용할 경우 이 차이는 무시할 수 있을 정도이다. 이러한 압축 알고리즘을 사용하기 힘들고 크기가 중요할 경우 유니코드 표준 압축 방식을 대신 사용할 수 있다. 유니코드 코드 포인트를 나타내는 비트들은 여러 부분으로 나뉘어서 UTF-8로 표현된 바이트의 하위 비트들에 들어간다. U+007F까지의 문자는 7비트 ASCII문자와 동일한 비트 패턴으로 표시되며, 그 이후의 문자는 다음과 같은 4바이트까지의 비트 패턴으로 표시된다. 7비트 ASCII문자와 혼동되지 않게 하기 위하여 모든 바이트들의 최상위 비트는 1이다.

 

변형된 UTF-8

자바는 내부적으로 문자열을 UTF-16 인코딩으로 저장하며, 문자열 직렬화를 위하여 UTF-8을 변형하여 사용하고 있다. 이를 변형된 UTF-8이라 부른다. 표준 UTF-8과의 차이는 크게 두 가지로, 한 가지는 U+0000 1바이트가 아니라 2바이트, 11000000 10000000으로 표현하는 것이다. 따라서 수정된 UTF-8에서는 인코딩된 문자열에 널 문자가 나타나지 않게 되며, 따라서 널 문자를 문자열의 끝으로 사용하는 C와 같은 언어에서 처리할 때 문자열이 잘리는 것을 막을 수 있다. 다른 한 가지 차이는 BMP 바깥의 문자를 인코딩하는 방법이다. 표준 UTF-8에서는 이 문자들은 위와 같이 4바이트로 인코딩되지만, 수정된 UTF-8에서는 이 문자들을 surrogate pair로 표시하여 두 문자로 나눈 뒤 같은 방법으로 인코딩한다. 이러한 방법은 자바의 문자 형이 16비트 크기이며, 따라서 U+10000 이상의 영역에 속한 유니코드 문자는 항상 두 개의 자바 문자로 표현되어야 한다는 것에서 유래하였다. 하지만 이 방법은 BMP 바깥의 문자를 UTF-8보다 더 긴 6바이트로 인코딩해야 한다.

 

UTF-8의 장점과 단점

장점

-ASCII 인코딩은 UTF-8의 부분 집합이다. 일반적인 ASCII 문자열은 올바른 UTF-8 문자열이며, 따라서 하위 호환성이 보장된다.

-UTF-8 문자열은 바이트 단위로 정렬을 수행하는 알고리즘으로도 코드 포인트 단위로 올바르게 정렬할 수 있다. (일반적인 목적으로는 재정렬이 필요하다)

-UTF-8 UTF-16 XML 문서의 표준 인코딩으로, 다른 인코딩들을 사용하려면 외부에서, 또는 문서 안에서 명시적으로 인코딩을 정해야 한다.

-다른 인코딩과의 왕복 변환이 간단하다.

-바이트 단위 문자열 검색 알고리즘들을 그대로 사용할 수 있다.

-간단한 알고리즘을 통하여 UTF-8 문자열임을 확인할 수 있다. , 다른 인코딩에서 나타나는 바이트들이 올바른 UTF-8 문자열일 가능성은 낮다.

-U+0000을 표현할 때를 제외하면, 널 문자는 UTF-8 문자열 안에 나타나지 않는다. 따라서 널 문자로 끝나는 문자열을 사용하는 C 언어의 문자열 함수(strncpy() 같은)를 그대로 사용할 수 있다.

단점

-나쁘게 만들어진(그리고 현재 표준을 따르지 않는) UTF-8 파서는 서로 다른 가짜 UTF-8 표현(예를 들어서 너무 긴 형식)을 같은 유니코드 문자열로 해석할 수 있다.

 

기존의 인코딩들과 비교했을 때

장점

-UTF-8은 모든 유니코드 문자를 표현할 수 있다. 예를 들어서, UCS-2 BMP 안의 문자만을 표현할 수 있다.

-바이트 경계를 순서대로 혹은 역순으로 찾기 쉽다. 만약 여러 바이트로 표시된 문자의 중간에서 찾기 시작한다면, 단지 해당 문자만 손실되고 나머지 문자들은 손상을 입지 않는다. 기존의 많은 다중바이트 인코딩들은 이러한 재동기화가 훨씬 힘들다.

-한 문자를 표현하는 바이트 표현은 다른 문자를 표현하는 어떤 바이트 표현에도 포함되지 않는다. 따라서 ASCII 문자가 아닌 값들에 투명한 파일 시스템이나 다른 소프트웨어(예를 들어서 C printf() 함수)와 호환성을 가진다.

-바이트 표현의 첫 바이트만 사용하여 해당 바이트 표현의 길이를 결정할 수 있다. 따라서 부분 문자열을 얻는 과정이 매우 쉽다.

-인코딩에 간단한 비트 연산만 사용되므로 효과적이다. UTF-8은 곱셈이나 나눗셈과 같은 느린 연산들을 사용하지 않는다.

단점

-대부분의 UTF-8 문자열은 일반적으로 적당한 기존 인코딩으로 표현한 문자열보다 더 크다. 판독 기호를 사용하는 대부분의 라틴 알파벳 문자는 적어도 2바이트를 사용하며, 한중일 문자들과 표의 문자들은 적어도 3바이트를 사용한다.

-한중일 문자들과 표의 문자를 제외한 거의 모든 기존 인코딩들은 한 문자에 1바이트를 사용하므로 문자열 처리가 간편한 반면, UTF-8은 그렇지 않다.

 

UTF-7과 비교했을 때

장점

-UTF-8은 한 문자를 표현하는 데 UTF-7보다 더 적은 바이트들을 사용한다.

-UTF-8 "+"를 그대로 인코딩하지만 UTF-7 "+-"로 인코딩한다.

단점

-UTF-8 8비트 안전한 전송 체계가 필요하다. 전자 우편에서 quoted-printable이나 base64 인코딩을 사용한다면 전송량이 더 많아진다. 예를 들어서 base64 인코딩의 경우 인코딩된 결과는 원본보다 약 33% 더 커진다. 하지만 최근에는 대부분의 SMTP 서버가 8BITMIME을 지원하기 때문에 이런 단점은 크게 부각되지 않는다.

 

UTF-16과 비교했을 때

장점

-U+0000부터 U+007F까지의 공백과 문장 부호를 포함한 ASCII 문자들은 1바이트로 표현할 수 있기 때문에, 한중일 문자와 표의 문자를 사용하지 않는 대부분의 문자열을 UTF-16보다 더 작은 크기로 표현할 수 있다.

-유닉스의 파일 시스템과 여러 도구들은 옥텟을 기본 단위로 하며, 문자와 경로 식별자(/, 0x2F)에 특별한 의미를 부여하는 경우가 많다. 0x00이나 0x2f 옥텟이 U+0000 U+002F가 아닌 다른 문자에서도 나타날 수 있는 UTF-16 등의 인코딩과는 달리, UTF-8 ASCII와 호환되기 때문에 0x00이나 0x2f 옥텟이 항상 U+0000 U+002F에 대응되므로 기존 API를 약간 수정해서 쓸 수 있다.

-UTF-16은 바이트 순서를 나타내기 위하여 바이트 순서 문자(BOM, U+FEFF)가 필요하지만, UTF-8은 바이트 순서가 정해져 있기 때문에 BOM이 필요하지 않다.

단점

-UTF-8은 가변 길이 인코딩이며, 다른 문자는 다른 바이트 수로 표현될 수 있다. 사실 이 문제는 별로 심각한 것이 아니며, UTF-8 문자열을 다루기 위한 추상적인 인터페이스를 만드는 것으로 해결될 수 있다. 실제로 기술적으로는 UTF-16 BMP 바깥 문자를 4바이트로 표현하기 때문에 가변 길이 인코딩이다.

-BMP에 들어 있는 한중일 문자들은 UTF-8에서 3바이트로 표현되지만, UTF-16에서는 2바이트로 표현된다. 따라서 UTF-8에서는 이러한 문자를 표현하기 위하여 더 많은 바이트가 필요하며 UTF-16과 비교할 때 최대 50%까지 크기가 늘 수 있다. 하지만 반대로 U+0000부터 U+007F 사이의 글자들은 UTF-16에서 크기가 두 배로 늘기 때문에 실질적으로는 큰 문제가 없을 수도 있다

산술계산에 사용되는 수를 제외한 모든 수치나 문자, 한글 등은 모두 코드(code)로 표현 현재는 아스키코드를 많이 사용하고 있으나, 향후는 16비트인 유니코드가 사용될 전망임.

 

*BCD코드 (Binary Coded Decimal Code)

 

- 2비트의 존비트(그룹 분류) 4비트의 디지트로 구성

64가지 종류만 표시하기 때문 초창기 컴퓨터에 사용

 

 

*EBCDIC 코드(Extended Binary coded Decimal Interchange Code) 

- IBM에서 개발한 8비트 코드로 256가지 정보 표현

- 2개의 존과 디지트로 구성

 

*아스키(ASCII)코드 (American Standard Code for Information Interchange)

7bit로 구성된 코드

- 데이터 통신에 활용하고자 만든코드

- 현재 문자 데이터 표현에 가장 많이 사용됨

- 표준 아스키는 7비트로 128가지 문자 표현

저작자 표시 비영리 동일 조건 변경 허락
신고

'programing > ETC' 카테고리의 다른 글

MS 워드 대문자 자동완성 해제하는 법  (0) 2009.09.11
power point 2007강좌  (0) 2009.08.19
인코딩  (0) 2009.08.14
정규식  (0) 2009.08.12
mylyn, trac 플러그인 설치  (0) 2009.08.12
Subversion 설치 방법 ~ SVN~~  (0) 2009.08.12
Posted by 대절님
TAG

댓글을 달아 주세요



티스토리 툴바