... | ... | @@ -214,20 +214,28 @@ UCS(Universal Character Set)는 ISO 10646으로 정의된 문자 인코딩의 |
|
|
유니코드는 2바이트 체계다. 하지만 계산을 해보면 17개의 Plane을 표현하는데 필요한 5 비트, Cell번호를 표현하는데 필요한 16비트를 합쳐 총 21비트가 유니코드의 모든 문자를 표현하기 위해서 필요하다는 것을 알 수 있다. (Group 표현은 Group 00만을 사용하므로 생략한다.)
|
|
|
|
|
|
#### 유니코드와 한글
|
|
|
유니코드는 한글의 표현 방식을 완성형, 조합형 모두 지원한다. 완성형이란 완성된 글자 하나하나를 바로 쓸 수 있도록 번호를 부여하여 저장한 것이고, 조합형은 한글의 초성, 중성, 종성으로 쓰이는 자, 모음을 저장하여 조합하여 쓸 수 있는 방식이다. 현대 한글 11,172자가 완성형 방식 처리에 쓰이고 있어서, 일상 생활의 거의 모든 단어를 표현할 수 있다. 조합형 방식은 자모음 하나 하나를 조합하기 때문에 용량이 더 크다는 문제 때문에 완성형에 없는 옛 한글을 표현하는 용도 이외에는 잘 쓰지 않는다.
|
|
|
유니코드는 한글의 표현 방식을 완성형, 조합형 모두 지원한다. 완성형이란 완성된 글자 하나하나를 바로 쓸 수 있도록 번호를 부여하여 할당한 것이고, 조합형은 한글의 초성, 중성, 종성으로 쓰이는 자, 모음을 저장하여 조합하여 쓸 수 있는 방식이다. 현대 한글 11,172자가 완성형 방식 처리에 쓰이고 있어서, 일상 생활의 거의 모든 단어를 표현할 수 있다. 조합형 방식은 자모음 하나 하나를 조합하기 때문에 용량이 더 크다는 문제 때문에 완성형에 없는 옛 한글을 표현하는 용도 이외에는 잘 쓰지 않는다.
|
|
|
|
|
|
#### 유니코드의 인코딩
|
|
|
유니코드와 유니코드 인코딩을 가장 쉽게 설명하는 방법은 유니코드는 각 문자에 번호를 지정하는 방식을 말하면 인코딩은 유니코드 숫자를 표현하는 방법이라 보면 된다. 여러 인코딩 방식이 있지만 주로 사용하는 UTF-8, UTF-16, UTF-32에 대해서 설명한다.
|
|
|
|
|
|
#### 유니코드의 인코딩 방식
|
|
|
여러 인코딩 방식이 있지만 주로 사용하는 UTF-8, UTF-16, UTF-32에 대해서 설명한다.
|
|
|
* **UTF-32**
|
|
|
UTF-32는 32비트로 표현하는 방식이다. 모든 코드 포인트를 32비트에 1:1로 매칭하고, 남는 11개의 앞 비트는 모두 0으로 채운다.
|
|
|
인코딩한 값 자체가 코드 포인트이기 때문에 해당 유니코드 문자를 찾기 쉽다. UTF-8 이나 UTF-16에 비해서 공간을 많이 차지하기 때문에 메모리 공간에 큰 제약이 없거나 고정 길이 인코딩이 필요할 때 쓰인다. 주로 Unix 환경에서 문자열을 메모리에서 다룰 때 사용된다.
|
|
|
UTF-32는 32비트로 표현하는 방식이다. 모든 코드 포인트를 32비트에 1:1로 매핑되고, 남는 11개의 앞 비트는 모두 0으로 채운다.
|
|
|
인코딩한 값 자체가 코드 포인트이기 때문에 해당 유니코드 문자를 찾기 쉽다. UTF-8 이나 UTF-16에 비해서 공간을 많이 차지하기 때문에 메모리 공간에 큰 제약이 없거나 고정 길이 인코딩이 필요할 때 쓰인다. 주로 Unix 환경에서 문자열을 메모리에서 다룰 때 사용된다.
|
|
|

|
|
|
|
|
|
* **UTF-16**
|
|
|
UTF-16은 16비트로 표현하는 방식이다. BMP 영역 범위 내의 문자를 만나면 16비트로 1:1 매핑된다. 하지만 BMP 영역 범위(U+0000 ~ U+FFFF) 이외의 문자를 만나면 32비트로 표현하는 가변 길이 인코딩 방식이다. 주로 Java나 Microsoft 플랫폼에서 문자열을 다룰 때 사용된다.
|
|
|
|
|
|

|
|
|

|
|
|
|
|
|
* **UTF-8**
|
|
|
|
|
|
UTF-8은 기본 문자 표현에 1byte를 사용한다. 그리고 ASCII랑 호환이 가능하다. 이런 이유로 웹이나 DB에서는 주로 UTF-8을 쓴다. 그리고 NULL 문자가 나오지 않기 때문에 중간에 NULL 값이 있으면 문제가 될 수 있는 자료형에도 이용 가능하다. 알파벳 표현시에는 1byte로 표현하지만 한글은 3byte로 표현한다.
|
|
|
|
|
|
* **UTF-16**
|
|
|
UTF-16은 기본 문자 표현에 2byte를 사용한다. 알파벳이나 한글이나 똑같이 2byte로 표현한다. BMP(기본 다국어 평면)상의 문자는 모두 2byte로 나타낼 수 있다. 바이트의 순서가 순차적이면 빅 엔디안, 역순이면 리틀 엔디안이라고 한다. 이것을 나타내기 위해서 리틀 엔디안에선 BOM을 넣는다. 하지만 대부분의 시스템은 빅 엔디안을 사용하기 때문에 BOM을 제대로 인식 못하고 문자로 읽어버려서 에러를 낼 가능성이 있기 때문에 웹 상에서는 UTF-8을 주로 쓴다. 닷넷 프레임워크의 기본 인코딩이 UTF-16이다.
|
|
|
* **BOM**
|
|
|
|
|
|
|
|
|
//BOM 관련된 것은 다시 정리
|
|
|
|