본문 바로가기
생활 꿀팁

JAVA 아스키 코드 변환 , 유니코드 [ UTF-8 , 숫자변환 하는 방법 ]

by 주가 전망! 2021. 3. 27.

!! 아스키 코드

 

미국에서 표준화가 추진된 정보교환용 7bit 부호로 정의합니다.

 

1962년 안시(ANSI)가 정의한 미국 표준 정보교환 코드이며 1963년 미국표준협회(ASA)에 의해 결정되어 미국의 표준부호가 되었습니다.

 

이 코드는 7비트의 이진수 조합으로 만들어져 총 128개의 부호를 표현합니다.

 

아스키코드의 처음 32개(0~31)는 프린터나 전송 제어용으로 사용되고 나머지는 숫자와 로마글자 및 도량형 기호와 문장기호를 나타냅니다.

 

아스키코드는 7자리의 2진코드인데 1비트의 패리티 비트를 추가하여 8비트로 많은 컴퓨터에 사용되고 있습니다.

 

 

!! 유니코드(Unicode)

 

유니코드라는 것은 즉 전세계의 코드표를 모두 모와 한번에 제공하자라는 개념이며, 흔히 UTF-8을 유니코드와 동일선상으로 이해하지만 UTF-8은 유니코드의 한 방법이며, 워낙 대중적이기 때문에 이렇게 이해하더라도 큰 문제는 없다.

 

초창기 rest의 개념을 json으로 리턴하는 것으로 이해하는 사례가 많은 것과 비슷한 맥락이라 할 수 있다.

 

유니코드는 기본적으로 16비트(bit) 즉, 2바이트(Byte)로 단어들을 표현하였다. 1Byte는 256bit이기에, 즉 2Byte는 256 x 256 = 65,536 글자를 표현할 수 있다.

 

 

!! UTF-8

 

유니코드의 대표적인 문자 인코딩으로 UTF-8(Universal Coded Character Set + Transformation Format 8-bit)이 있기 때문에 UTF-8에 대해서 설명을 하자면, 한 문자를 표현하기 위해서 1바이트에서 4바이트까지를 사용한다. 예를 들어 아스키코드에 포함된 문자들은 1바이트만으로 표시된다.

 

유니코드는 기본적으로 U+라는 표식을 붙이며 나머지 16진수의 숫자값을 4개 더해서 표식을 한다.

 

16진수를 2번 곱하면 256이 되기에 1Byte가 되며, 16진수 숫자가 4개면 2Byte가 되기에 실질적으로 U+2Byte 16진수로 인식을 하면 되나 최근 들어서 문자가 계속 증가하였기 65536 범위가 넘어셨으면 이를 위해 평면이라는 개념이 추가 생겨났다.

 

!! 아스키코드 숫자변환 원리

 

char a = 65 를 한 후에 a를 출력하면 왜 A가 출력이 될까? 궁금하였다.

 

단순히 대문자 A 에 대응하는 10진수는 65이기 때문에 나오는 것은 알겠다.

 

그럼 내부적으로 그렇게 구현이 되어있는건가?

 

char a = 'C' - 2 를 한 후에 a를 출력하면 왜 A가 출력이 될까?

 

이거는 문자 - 정수를 했는데 어떻게 알아서 출력이 되는건지? 그냥 받아들여야 하나? 그렇게 생각을 하였다.

 

그래서 좀 더 찾아본 것을 정리하려 한다. char타입은 문자가 저장된다 생각하지 말고 2byte 크기의 양의 정수를 저장하는 타입이라고 생각하자. 즉 0~65535 범위의 정수를 저장할 수 있다.

 

이 타입이 연산이 될때에도 이 정수값이 사용이 된다. char a = 'C'-2; 이문장에서 문자와 숫자의 연산이라고 생각하니까 개념이 어렵다.

댓글