[Java] java의 인코딩 Unicode, UTF-8, EUC-KR
본문 바로가기
Java

[Java] java의 인코딩 Unicode, UTF-8, EUC-KR

by IYK2h 2022. 7. 22.
728x90

Unicode

이전 글에서 본 문제점을 해결하기 위해 국제 표준화 기구(IOS)는 표준화작업을 진행하였다.

유니코드는 유니코드 컨소시엄에서 표준을 제정하고, 문자 집합, 문자열 인코딩, 문자열 처리 방식, 문자 정보 데이터베이스 등을 제공한다.

유니코드의 경우 각 나라별로 자신의 언어가 속하고 있는 고유한 공간을 할당받는다.

한글의 경우에는 0xAC00부터 시작하여 11172 자의 공간을 차지한다. 모든 글자는 사전 순서대로 매핑되어있다.

즉, 유니코드는 숫자와 글자 키와 값이 1:1로 매핑된 형태의 코드이다.

저장 효율을 위해 언어에 따라 하나의 문자를 표현하는데 1~4byte를 사용한다.

이로인해 유니코드는 26개국에서 같은 데이터를 공유할 수 있게 되어, 표준 인코딩 기법이 되었다.

이전에 사용하던 "EUC-**" 과 호환이 되지 않는다는 단점이 있다. 바이트 데이터가 전혀 달라 호환되지 않는다.

UTF-8(Unicode Transformation Format -8 bit)

유니코드를 전송하기 위한 규격을 의미하며, 가장 많이 쓰이는 대표적인 유니코드 인코더이다.

영어는 1byte(8bit) 면 충분하다, 하지만 한글은 3byte(32bit) 이상 필요한 경우도 있다. 이러한 byte의 가변 길이를 지원해 각 언어별로 최적화된 크기에 저장할수 있도록해 낭비를 없애기 위해 제안된 것이다.

EUC-KR

한글을 표현하기 위해 2byte(16bit)를 사용하는 인코더

그래서 자바의 인코딩은?

  • 자바 메모리 상에서 문자열이 UTF-16 으로 인코딩되어 처리된다.
  • 문자열 송/수신을 위해 직렬화가 필요할 때에는 변형된 UTF-8을 사용한다.
  • 문자열을 입출력 할 때는 운영체제 기본 인코딩값, 또는 사용자가 지정 혹은 사용자 환경에 따른 인코딩 값으로 문자열을 인코딩한다.

유니코드 참고하면 좋은 자료 : https://miaow-miaow.tistory.com/36

728x90

댓글