컴퓨터는 숫자밖에 모른다.
때문에 우리가 사용하는 문자를 컴퓨터에서 사용하기 위해서는 숫자로 변환해줘야 한다.
이러한 과정을 인코딩(encoding)이라고 한다.
반대로 컴퓨터가 사용하고 있는 코드(숫자표현)을 사람이 뜯어봐야하는 경우도 생긴다.
코드를 사람이 사용하는 문자로 변환하는 과정을 디코딩(decoding)이라고 한다.
사람의 언어를 컴퓨터 언어로 바꾸는 기준은 여러가지가 있다.
- 아스키코드 (ASCII)
- 확장 아스키 코드(Extended ASCII)
- 코드페이지(code page, cp)
- 유니코드
가장 기본인 코드이다.
특징은 아래와 같다.
아스키코드는 7bit이다.
그러나 데이터는 보통 byte 단위로 다뤄지기 때문에 1bit가 남은 걸 활용해서 추가로 문자를 적용한게 확장아스키이다.
확장아스키의 경우는 여러 국가와 기업에서 서로의 필요에 따라 다르게 정의해서 사용하고 있다.
ISO(국제표준화기구)에서 발표한 몇가지 표준 중 하나는 'ISO 8859-1(ISO Latin 1)' 이다.
이 버전은 서유럽에서 일반적으로 사용하는 문자들을 포함한다.
PC를 사용하는 지역이나 국가에 따라서 여러버전의 확장아스키가 필요했다.
코드페이지의 경우는 IBM사에서 도입한 코드이며 각각의 코드페이지는 번호를 붙여서 사용했다.
한글윈도우을 사용하는 경우 'CP 949'
영문윈도우을 사용하는 경우 'CP 437'
이런 형식으로 사용하고 있다.
다른 언어를 사용하는 컴퓨터끼리도 문서교환이 활발해지면서 모든 문자를 통합하고자 하였고 그에 따라 발생한 것이 유니코드이다.
유니코드는 UTF-8
, UTF-16
, UTF-32
등 여러가지 종류가 있다.
Java는 UTF-16을 사용하고 있다.
일반적인 웹문서에서는 UTF-8을 사용한다.
그러나 UTF-8의 경우는 영문과 숫자는 1byte, 한글은 3byte로 표현되어서, 문자의 크기가 통일되지않는다.
문자 크기가 가변적인 점은 프로그래밍할때에 다루기 어렵게 만들 수 있다.