자바 - 컴퓨터와 문자 인코딩

문자 집합과 인코딩

컴퓨터가 인식하고 표현할 수 있는 문자의 모음을 문자 집합(character set)이라고 한다. 컴퓨터는 문자 집합에 속해 있는 문자를 이해할 수 있고, 반대로 문자 집합에 속해 있지 않은 문자는 이해할 수 없다.

문자 집합에 속한 문자라고 해서 컴퓨터가 그대로 이해하는 것은 아니다. 문자를 01로 변환해야 컴퓨터가 이해할 수 있다. 이 변환 과정을 문자 인코딩(character encoding)이라 하고 인코딩 후 01로 이루어진 결과값이 문자 코드가 된다. 같은 문자 집합에 대해서도 다양한 인코딩 방법이 있을 수 있다.

인코딩의 반대 과정, 즉 01로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정은 문자 디코딩(character decoding)이라고 한다.

예를 들어 문자 A를 저장하면, 컴퓨터는 문자 집합을 통해 A의 숫자 값 65를 찾고, 65를 메모리에 저장한다.(2진수로 변환해서) 메모리에 저장된 문자를 불러올 때는 반대로 작동한다. 메모리에 저장된 숫자 값 65를 불러오고, 문자 집합을 통해 문자 A를 찾아서 출력한다.


ASCII 문자 집합

ASCII(American Standard Code for Information Interchange) 는 초창기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함한다.

아스키 문자 집합에 속한 문자(아스키 문자)들은 각각 7비트로 표현되어 총 2^7(128)개의 문자를 표현할 수 있다.

위키백과 - ASCII

아스키 코드는 간단하게 인코딩된다는 장점이 있지만, 한글을 포함한 아스키 문자 집합 외의 문자, 특수문자를 포함할 수 없다는 단점이 있다.

근본적으로 7비트로 표현하기 때문에 128개보다 많은 문자를 표현하지 못하기 때문이다. 더 다양한 문자 표현을 위해 아스키 코드에 1비트를 추가한 8비트의 확장 아스키가 등장하기도 했지만, 그럼에도 표현 가능한 문자의 수는 256개로 턱없이 부족했다.

그래서 한국을 포함한 영어권 외의 나라들은 자신들의 언어를 01로 표현할 수 있는 고유한 문자 집합과 인코딩 방식이 필요하다고 생각했다. 이런 이유로 EUC-KR이라는 한글 인코딩 방식이 등장했다.


EUC-KR

초창기 등장한 한글 문자 집합으로, 모든 한글을 담는 것 보다는 자주 사용하는 한글 2,350개만 포함해서 만들었다.

한글의 글자는 아주 많기 때문에 256가지만 표현할 수 있는 1byte로 표현하는 것은 불가능하다. 그래서 2byte(16bit)로 총 65,536가지를 표현한다.

ASCII는 1byte, 한글은 2byte를 사용한다. (영어는 1byte, 한글은 2byte를 메모리에 저장)

EUC-KR은 '쀍', '쀓', '믜' 같은 글자는 표현할 수 없다. 이런 문제를 조금이나마 해결하기 위해 등장한 것이 마이크로소프트의 CP949이다. CP949는 EUC-KR의 확장된 버전으로 더욱 다양한 문자를 표현할 수 있지만, 한글 전체를 표현하기에 넉넉한 양은 아니다.


유니코드

다양한 문자 인코딩 표준이 존재했지만, 이들은 모두 특정 언어 또는 문자 집합을 대상으로 했기 때문에 국제적으로 호환성 문제가 많았다.

이를 해결하기 위해 전 세계의 모든 문자들을 단일 문자 집합으로 표현할 수 있는 유니코드 표준이 생겨났다. (UTF-16, UTF-8의 시작)

UTF-16

16bit(2byte) 기반의 문자 집합으로 자주 사용하는 기본 다국어들은 2byte로 표현한다.(65,536가지 표현 가능)

큰 단점이 있는데 ASCII 영문도 2byte를 사용한다는 점이다. 그래서 UTF-16을 사용한다면 영문의 경우 다른 문자 집합보다 2배의 메모리를 더 사용한다.(웹에 있는 문서의 80% 이상은 영문 문서) 그리고 ASCII와 호환되지 않는다는 점도 큰 단점 중 하나이다.

대부분의 문자를 2byte로 처리하기 때문에 계산이 편리하다는 장점이 있다.

UTF-8

8bit(1byte) 기반의 가변 길이 인코딩 문자 집합으로, 1byte ~ 4byte를 사용해서 문자를 인코딩한다.

UTF-16에 비해 상대적으로 사용이 복잡하고, ASCII를 제외한 일부 언어에서 더 많은 용량을 사용한다는 단점이 있다.

그러나 ASCII 문자는 1byte로 표현하여 ASCII와 호환된다는 장점이 있다.

UTF-8현대의 사실상 표준 인코딩 기술이다. 현재 대부분의 웹사이트와 애플리케이션에서 기본 인코딩으로 사용한다.


메인 ⏫

다음 ↪️ 문자 인코딩 - 문자 인코딩 예제

Last updated