Unicode
유니코드는 ISO에서 국가별로 독자적인 문자열 인코딩을 사용하는 문제를 해결하기 위해 만든 표준이다. 유니코드 인코딩은 UTF-8 UTF-16 UTF-32가 있다.
UTF-8
UTF-8에서 8은 1바이트로 인코딩한다는 것을 의미한다. UTF-8은 1바이트에서 4바이트까지 지원하는 가변길이 인코딩이다. 아스키 코드와 완벽히 호환된다. UTF-8에서 한글은 3바이트로 처리된다. 대부분의 환경은 UTF-8로 처리하며 특히 JSON은 UTF-8로 인코딩된다. 사용되는 바이트 규칙은 다음과 같다.
바이트 수 | 1 바이트 | 2 바이트 | 3 바이트 | 4 바이트 |
---|---|---|---|---|
1 | 0xxxxxxx | |||
2 | 110xxxxx | 10xxxxxx | ||
3 | 1110xxxx | 10xxxxxx | 10xxxxxx | |
4 | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx |
변형된 UTF-8
변형된 UTF-8은 C++과 같은 문자열의 끝을 null로 표현하는 언어와의 호환을 맞추기 위해 개발됬다. 변형된 UTF-8은 1바이트에서 6바이트까지 지원하는 가변길이 인코딩이다.
UTF-16
UTF-16은 2바이트나 4바이트로 처리하는 인코딩 방식이다. 그렇기 때문에 아스키 코드와는 호환되지 않는다. 이 UTF-16에는 Byte Order Mark를 사용하는데 LE와 BE가 그에 해당하며 이는 CPU 설계에 따라 바이트를 처리하는 순서가 다르기 때문에 구분한다. 특히 자바는 내부적으로 UTF-16BE를 사용하고 있다.