0과 1로 문자를 표현하는 방법
컴퓨터는 0과 1만 이해할 수 있다고 했는데, 우리가 컴퓨터에서 문서 작업을 하거나 인터넷을 볼때나 문서등을 볼 때 숫자로 입력하고 숫자로 출력되는 것이 아닌 문자로써 사용을 하게 된다
어떻게 컴퓨터가 문자를 이해하고 출력을 하는걸까?
문자 집합과 인코딩
0과 1로 문자를 표현하는 방법에 대해 알기 위해 알아야 할 용어가 있습니다.
- 문자 집합(character set) : 컴퓨터가 인식하고 표현할 수 잇는 문자의 모음
컴퓨터는 문자 집합에 속해 있는 문자를 이해할 수 있고, 반대로 문자 집합에 속해 있지 않은 문자는 이해할 수 없다.
- 문자 인코딩(character encoding) : 문자 집합에 속한 문자를 0과 1로 변환 하는 과정
문자 집합에 속한 문자라고 해서 컴퓨터가 그대로 이해할 수 있는 건 아닙니다. 문자 인코딩으로 인코딩 후 0과 1로 이루어진 결과값이 문자 코드가 됩니다
- 문자 디코딩(character decoding) : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
아스키 코드(ASCII)
아스키(ASCII : American Standard Code for Infomation Interchange) : 는 초장기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 그리고 일부 특수 문자를 포함합니다.
아스키 문자들은 각각 7비트로 표현되는데, 7비트로 표현할 수 있는 정보의 가짓수는 2⁷ 개로, 총 128개의 문자를 표현할 수 있습니다.
실제 아스키 문자는 8비트(1바이트)를 사용하지만 8비트 중 1비트는 패리티 비트로 오류 검출을 위해 사용되는 비트이기에 실질적으로 7비트만 사용함
표를 보면 알 수 있듯 아스키 문자들은 0부터 127까지 총 128개의 숫자 중 하나의 고유한 수에 일대일로 대응된다. 아스키 문자에 대응된 고유한 수를 아스키 코드 라고 한다
‘A’는 십진수 65 (이진수 1000001₂)로 인코딩되어 사용된다.
아스키 코드는 영어 밖에 표현할 수가 없기 때문에 영어권 외의 나라들은 자신들의 언어를 0과 1로 표현할 수 있는 고유한 문자 집합과 인코딩 방식을 만듭니다.
EUC-KR
2byte로 한글을 표현한 인코딩 방식
2byte == 16bit : 네 자리 16진수로 표현 가능
총 2,350개 정도의 한글 단어를 표현할 수 있습니다. 아스키 코드보다 표현할 수 있는 문자가 많아지기는 했지만, EUC-KR로도 모든 한글 조합을 표현할 수 있을 정도로 많은 양이 아니라서 문자에 정의되지 않은 ‘쀍’, ‘믜’ 와 같은 글자는 EUC-KR로 표현할 수 없습니다.
이러한 문제를 조금이나마 해결하기 위해 마이크로소프트의 CP949(Code Page 949) 라는 문자 인코딩도 나왔지만, CP949로도 더욱 다양한 문자를 표현할 수는 있지만 이마저도 한글 전체를 표현하기엔 넉넉하지 않다.
유니코드와 UTF-8
언어별로 인코딩을 나라마다 해야 한다면 다국어를 지원하는 프로그램을 만들 때 각 나라 언어의 인코딩을 모두 알아야 하는 번거로움이 있습니다.
모든 나라 언어의 문자 집합과 인코딩 방식이 통일되어 있는 형태이다.
유니코드(unicode) 문자 집합 : 유니코드는 EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수문자, 화살표나 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합
유니코드는 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합이고 문자 인코딩 세계에서 매우 중요한 역할을 맡고 있다.
유니코드는 각 문자마다 고유한 값이 부여되고 문자에 부여된 값 자체를 인코딩된 값으로 삼지 않고 이 값을 다양한 방법으로 인코딩합니다.
유니코드 문자 인코딩 방식 : UTF-8, UTF-16, UTF-32
UTF-8 인코딩 방식
UTF-8은 1바이트부터 4바이트까지의 인코딩 결과를 만들어낸다. 인코딩 결과가 가변적입니다
유니코드 문자에 부여된 값의 범위에 따라 바이트가 가변으로 인코딩됩니다
예를 들어 ‘한’에 부여된 값은 D55C16D55C_{16}, ‘글’에 부여된 값은 AE0016AE00_{16} 인데 두 글자 모두 0800과 FFFF 사이에 있으므로 ‘한’, ‘글’을 UTF-8로 인코딩하면 3바이트로 표현될 것이다.
표에 ‘X’ 표가 있는 곳에 유니코드 문자에 부여된 고유한 값이 이진수로 변환되어 들어가게 된다
1byte == 8bit(8자리)
0xD55C == 0b1101010101011100
0xD55C = 0b 11101101 10010101 10011100
우선적으로 유니코드의 16진수를 이진수로 변환하고 표에 표시되어 있는 n바이트 부분의 xxxx 부분에 2진수를 8자리 까지 넣어주고, 8자리가 꽉차면 다음 바이트로 이동하여 해당 바이트의 앞에 정해진 수를 놔두고 그 뒤로 이진수로 변환한 남은 숫자들을 넣어주면 된다.
핵심 포인트
- 문자 집합은 컴퓨터가 인식할 수 있는 문자의 모음으로, 문자 집합에 속한 문자를 인코딩하여 0과 1로 표현할 수 있습니다.
- 아스키 문자 집합에 0부터 127까지의 수가 할당되어 아스키 코드로 인코딩됩니다.
- EUC-KR은 한글을 2바이트 크기로 인코딩할 수 있는 완성형 인코딩 방식입니다.
- 유니코드는 여러 나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합이며, UTF-8, UTF-16, UTF-32는 유니코드 문자의 인코딩 방식입니다.
Quiz!
답
hongong
답
2.EUC-KR은 완성형 인코딩입니다.
답
0xC548, 0xB155 는 3바이트로 구성
0xC548 = 0b1100 0101 0100 1000
0xB155 = 0b1011 0001 0101 0101

1바이트 : 1110XXXX, 2바이트 : 10XXXXXX, 3바이트 : 10XXXXXX
‘안’ = 11101100 10010101 10001000
‘녕’ = 11101011 10000101 10010101
‘안’ + ‘녕’ = 1110 1100 1001 0101 1000 1000 1110 1011 1000 0101 1001 0101
답 : 11101100100101011000100011101011100001011001010121110 1100 1001 0101 1000 1000 1110 1011 1000 0101 1001 0101_2
0과 1로 문자를 표현하는 방법
컴퓨터는 0과 1만 이해할 수 있다고 했는데, 우리가 컴퓨터에서 문서 작업을 하거나 인터넷을 볼때나 문서등을 볼 때 숫자로 입력하고 숫자로 출력되는 것이 아닌 문자로써 사용을 하게 된다
어떻게 컴퓨터가 문자를 이해하고 출력을 하는걸까?
문자 집합과 인코딩
0과 1로 문자를 표현하는 방법에 대해 알기 위해 알아야 할 용어가 있습니다.
- 문자 집합(character set) : 컴퓨터가 인식하고 표현할 수 잇는 문자의 모음
컴퓨터는 문자 집합에 속해 있는 문자를 이해할 수 있고, 반대로 문자 집합에 속해 있지 않은 문자는 이해할 수 없다.
- 문자 인코딩(character encoding) : 문자 집합에 속한 문자를 0과 1로 변환 하는 과정
문자 집합에 속한 문자라고 해서 컴퓨터가 그대로 이해할 수 있는 건 아닙니다. 문자 인코딩으로 인코딩 후 0과 1로 이루어진 결과값이 문자 코드가 됩니다
- 문자 디코딩(character decoding) : 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
아스키 코드(ASCII)
아스키(ASCII : American Standard Code for Infomation Interchange) : 는 초장기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 그리고 일부 특수 문자를 포함합니다.
아스키 문자들은 각각 7비트로 표현되는데, 7비트로 표현할 수 있는 정보의 가짓수는 2⁷ 개로, 총 128개의 문자를 표현할 수 있습니다.
실제 아스키 문자는 8비트(1바이트)를 사용하지만 8비트 중 1비트는 패리티 비트로 오류 검출을 위해 사용되는 비트이기에 실질적으로 7비트만 사용함
표를 보면 알 수 있듯 아스키 문자들은 0부터 127까지 총 128개의 숫자 중 하나의 고유한 수에 일대일로 대응된다. 아스키 문자에 대응된 고유한 수를 아스키 코드 라고 한다
‘A’는 십진수 65 (이진수 1000001₂)로 인코딩되어 사용된다.
아스키 코드는 영어 밖에 표현할 수가 없기 때문에 영어권 외의 나라들은 자신들의 언어를 0과 1로 표현할 수 있는 고유한 문자 집합과 인코딩 방식을 만듭니다.
EUC-KR
2byte로 한글을 표현한 인코딩 방식
2byte == 16bit : 네 자리 16진수로 표현 가능
총 2,350개 정도의 한글 단어를 표현할 수 있습니다. 아스키 코드보다 표현할 수 있는 문자가 많아지기는 했지만, EUC-KR로도 모든 한글 조합을 표현할 수 있을 정도로 많은 양이 아니라서 문자에 정의되지 않은 ‘쀍’, ‘믜’ 와 같은 글자는 EUC-KR로 표현할 수 없습니다.
이러한 문제를 조금이나마 해결하기 위해 마이크로소프트의 CP949(Code Page 949) 라는 문자 인코딩도 나왔지만, CP949로도 더욱 다양한 문자를 표현할 수는 있지만 이마저도 한글 전체를 표현하기엔 넉넉하지 않다.
유니코드와 UTF-8
언어별로 인코딩을 나라마다 해야 한다면 다국어를 지원하는 프로그램을 만들 때 각 나라 언어의 인코딩을 모두 알아야 하는 번거로움이 있습니다.
모든 나라 언어의 문자 집합과 인코딩 방식이 통일되어 있는 형태이다.
유니코드(unicode) 문자 집합 : 유니코드는 EUC-KR보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수문자, 화살표나 이모티콘까지 코드로 표현할 수 있는 통일된 문자 집합
유니코드는 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합이고 문자 인코딩 세계에서 매우 중요한 역할을 맡고 있다.
유니코드는 각 문자마다 고유한 값이 부여되고 문자에 부여된 값 자체를 인코딩된 값으로 삼지 않고 이 값을 다양한 방법으로 인코딩합니다.
유니코드 문자 인코딩 방식 : UTF-8, UTF-16, UTF-32
UTF-8 인코딩 방식
UTF-8은 1바이트부터 4바이트까지의 인코딩 결과를 만들어낸다. 인코딩 결과가 가변적입니다
유니코드 문자에 부여된 값의 범위에 따라 바이트가 가변으로 인코딩됩니다
예를 들어 ‘한’에 부여된 값은 D55C16D55C_{16}, ‘글’에 부여된 값은 AE0016AE00_{16} 인데 두 글자 모두 0800과 FFFF 사이에 있으므로 ‘한’, ‘글’을 UTF-8로 인코딩하면 3바이트로 표현될 것이다.
표에 ‘X’ 표가 있는 곳에 유니코드 문자에 부여된 고유한 값이 이진수로 변환되어 들어가게 된다
1byte == 8bit(8자리)
0xD55C == 0b1101010101011100
0xD55C = 0b 11101101 10010101 10011100
우선적으로 유니코드의 16진수를 이진수로 변환하고 표에 표시되어 있는 n바이트 부분의 xxxx 부분에 2진수를 8자리 까지 넣어주고, 8자리가 꽉차면 다음 바이트로 이동하여 해당 바이트의 앞에 정해진 수를 놔두고 그 뒤로 이진수로 변환한 남은 숫자들을 넣어주면 된다.
핵심 포인트
- 문자 집합은 컴퓨터가 인식할 수 있는 문자의 모음으로, 문자 집합에 속한 문자를 인코딩하여 0과 1로 표현할 수 있습니다.
- 아스키 문자 집합에 0부터 127까지의 수가 할당되어 아스키 코드로 인코딩됩니다.
- EUC-KR은 한글을 2바이트 크기로 인코딩할 수 있는 완성형 인코딩 방식입니다.
- 유니코드는 여러 나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합이며, UTF-8, UTF-16, UTF-32는 유니코드 문자의 인코딩 방식입니다.
Quiz!
답
hongong
답
2.EUC-KR은 완성형 인코딩입니다.
답
0xC548, 0xB155 는 3바이트로 구성
0xC548 = 0b1100 0101 0100 1000
0xB155 = 0b1011 0001 0101 0101

1바이트 : 1110XXXX, 2바이트 : 10XXXXXX, 3바이트 : 10XXXXXX
‘안’ = 11101100 10010101 10001000
‘녕’ = 11101011 10000101 10010101
‘안’ + ‘녕’ = 1110 1100 1001 0101 1000 1000 1110 1011 1000 0101 1001 0101
답 : 11101100100101011000100011101011100001011001010121110 1100 1001 0101 1000 1000 1110 1011 1000 0101 1001 0101_2