자바 문자열 인코딩
포스트
취소

자바 문자열 인코딩

문자 인코딩

  • 하드웨어는 숫자 밖에 인식할 수 없어 문자에 개별 숫자를 부여해야한다. “문자 A는 숫자 65로 표시하기로 약속한다.” 이러한 문자 표현에 대한 약속을 가리켜 ‘문자 셋’이라고 한다. 유니코드는 모든 나라의 문자를 수용하여 전 세계적으로 사용하는 문자 셋이다.
  • 자바가 유니코드를 지원하더라도 문자의 출력은 운영체제에 의존적이다. 출력하고자 하는 언어의 폰트가 운영체제에 설치되어 있어야 한다.
  • 자바 char 타입은 2byte로 유니코드를 표현한다

UTF-8

  • UTF-8은 UTF-16이 7bit로 표현 가능한 아스키코드 문자를 16bit를 표현하자, 메모리 낭비를 막기 위해 탄생한 인코딩 방식이다
  • UTF-8은 16bit 유니코드 문자를 지원함에도 아스키코드 문자를 7bit로 표현한다
  • 한글은 유니코드에 속하므로 1byte로 표현할 수 없다

유니코드 처리

1
2
3
- 7bit만으로 아스키코드의 문자를 표현하다보니 유니코드 문자가 들어오면
 문자를 인식하는 과정에서 오류가 발생할 수 있다
- UTF-8은 이러한 오류를 피하고자 헤더가 추가되어 3byte를 차지하게 되었다
  • 아스키코드가 주로 사용되는 환경에서는 UTF-8이 유리하지만 다양한 문자가 사용되는 공간이라면 메모리와 임의 접근 효율에서 떨어진다
  • 그러므로 JVM은 문자를 메모리에 저장할 때 UTF-16를 사용하여 저장한다 (JVM 외부와 데이터를 주고 받을 때 다양한 언어를 접하므로 합리적임)
  • 요즘은 UTF-8로 통일되어있어 실제로 JVM이 UTF-16을 사용하는지 검색

UTF-16 -> UTF-8 전환 과정

1
2
1110 xxxx, 10xx xxxx, 10xx xxxx
헤더와 함께 16bit 이진수 데이터가 순차적으로 삽입됨

[참고] https://st-lab.tistory.com/41

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.