본문 바로가기
프로그래밍이야기/Java

[Java] Charset과 유니코드 그리고 인코딩

by 사랑꾼이야 2020. 5. 20.
반응형

몇년전 이야기.

모 은행 프로젝트를 끝내고 본사로 돌아왔을때.

회사 부장님이 은행에서 진행한 내용에 대해서 설명을 해달라고 하였다.

설명을 신나게 하고 있는데 갑자기 한 가지 질문을 던지셨다.

"전문은 왜 사용하지?"

..

..

한순간 정적이 흐르고.

통신을 하기 위해서 사용한다고 대답하였지만.

부장님 기준에는 원하지 않은 대답으로 기억한다. 

지금 내 기준에서 정확한 답을 무엇일까?

표준통신규약이라고 말할 수 있을것 같다.

서로간의 약속된 규약을 통해 약속한 데이터를 전송하는 것.

컴퓨터 세상에서는 이러한 데이터를 표현하기 위해서 문자집합을 정의해야 한다.

표현해야할 문자(한글, 영어 등등)가 있고 특수문자도 정의해야 하고.

이러한 문자들의 순서를 지정한 것을 문자 집합(character set)이라고 한다. 

문자집합을 컴퓨터에 저장하기 위하여 Byte형태로 표현이 필요하다.


Charset

문자집합.

컴퓨터에서 문자를 표현하기 위해 각 문자를 정수값에 대응시켜 놓은 체계.


유니코드(UNICODE)

문자열을 숫자로 표현하기 위해 매핑.

코드표가 존재.

예를들어 "A"는 U+0041, "가"는 U+AC00


인코딩(Encoding)

문자 코드를 기준으로 문자를 코드로 변환


디코딩(Decoding)

문자 코드를 기준으로 코드를 문자로 변환


인코딩 방식

1) UTF-8 

문자열을 8-bit 기반으로 저장

영어는 1byte, 한글은 3byte

유니코드와 같은 표를 사용

2) UTF-16

문자열을 16-bit 기반으로 저장

영어와 한글 처리 시 모두 2byte

ANSI와 호환불가능

유니코드와 같은 표를 사용

3) ANSI code(= ASCII)

ASCII Table을 기준으로 인코딩

4) EUC-KR

ANSI를 한국에서 확장하여서 사용

코드표를 통해서 문자로 변환

영어는 1byte, 한글은 2byte


다음 내용은 이 케릭터셋을 이용해서 각 문자열의 길이를 구하는 코드를 살펴보도록 하겠다.

반응형

댓글