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

|
|
|

|
|
|

|
|
|

|
|
|
|
|
|
* **UTF-8**
|
|
|
UTF-8은 8비트로 표현하는 방식이다. UTF-16은 주로 사용되는 BMP 영역 범위를 인코딩 하기에는 좋았지만, ASCII 문자도 2바이트로 변환하는 것이 문제였다. ASCII 문자는 1바이트여서 UTF-16으로 변환 시 "00 41 00 42" 처럼 문자열 중간에 00이 들어가게 된다. 이는 문자열 관련 C 함수들에서 00을 NULL로 인식하여 오류를 발생시킬 수 있다. 이런 문제를 피하기 위해서 UTF-8 이 제안되었다. UTF-8은 ASCII 호환성을 주 목적으로 하기 때문에 중간에 NULL이 들어가지 않도록 만들어졌다. ASCII 영역 (U+0000 ~ U+007F) 에 대해서는 1바이트로 1:1 매핑되고, 더 큰 코드 포인트에 대해서는 다음과 같이 인코딩된다.
|
|
|
|
|
|
UTF-8은 기본 문자 표현에 1byte를 사용한다. 그리고 ASCII랑 호환이 가능하다. 이런 이유로 웹이나 DB에서는 주로 UTF-8을 쓴다. 그리고 NULL 문자가 나오지 않기 때문에 중간에 NULL 값이 있으면 문제가 될 수 있는 자료형에도 이용 가능하다. 알파벳 표현시에는 1byte로 표현하지만 한글은 3byte로 표현한다.
|
|
|
|
|
|
* **BOM**
|
|
|
|코드 포인트 범위|비트수|인코딩|
|
|
|
|-------------------|-------|--------|
|
|
|
|U+0000 ~ U+007F|7|그대로 인코딩|
|
|
|
|U+0080 ~ U+07FF|11|110xxxxx 10xxxxxx|
|
|
|
|U+0800 ~ U+FFFF|16|1110xxxx 10xxxxxx 10xxxxxx|
|
|
|
|U+10000 ~ U+1FFFFF|21|11110xxx 10xxxxxx 10xxxxxx 10xxxxxx|
|
|
|
|
|
|
위의 표에서 x로 표시된 부분에는 원래의 비트값을 순서대로 적는다.
|
|
|
그래서 ASCII 영역(U+0000 ~ U+007F) 내의 문자인 알파벳 같은 경우는 1바이트 인코딩, 한글은 완성형은 AC00 ~ D7AF 영역에 매핑되어 있기때문에 UTF-8로 인코딩하면 3바이트로 인코딩이 된다. 주로 웹이나 DB에서 많이 사용된다.
|
|
|
|
|
|
//BOM 관련된 것은 다시 정리
|
|
|
|
|
|
* **BOM** |