[Character Encoding] Unicode

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를 사용하고 있다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/08/20/Etc/UniCode/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.