[20210622] java에서의 문자 인코딩

Java에서 문자열을 어떤 인코딩을 사용하여 저장하는지 알아보자.

UTF-16

유니코드의 인코딩 종류 중 하나로 16비트 단위로 인코딩한다. 가변형 인코딩 방식으로 한 글자를 2 혹은 4바이트로 표현한다. ASCII와 호환이 어렵고 한중일 문자들이 2바이트로 표현되어서 한중일 언어를 인코딩 할 때 에는 utf-8을 쓸 때 보다 크기가 작아진다.

Java에서의 문자 인코딩

Java는 기본적으로 유니코드를 완벽히 지원하는 언어이며 내부적으로는 1개 문자를 UTF-16 인코딩으로 저장한다. 유니코드의 0번 플레인(U+0000부터 U+FFFF 코드포인트)까지는 1개 char 타입(2바이트)으로 표현하고 나머지 1~16번 플레인(U+10000부터 U+10FFFF 코드포인트)은 2개의 char 타입을 묶어(4바이트) 1개 문자로 표현한다. 예를 들어 U+20000 코드포인트는 2개의 char를 묶음으로 하여 \uD840\uDC00와 같이 UTF-16 인코딩으로 저장한다. 이와 같이 1개 유니코드 문자가 항상 1개의 char 타입으로 대응되지 않는다는 사실을 인지하고 있어야 한다. char 타입의 배열인 String 문자열 타입의 크기(length())가 유니코드 문자의 개수와 일치하지 않는 이유이다.


출처

https://sleepyeyes.tistory.com/3 https://jsonobject.tistory.com/246