문자열 인코딩
문자열 인코딩이란
2진법을 사용하는 컴퓨터가 인간의 언어를 일정한 규칙에 따라 2진수로 변환하는 방식입니다.
컴퓨터는 사람이 사용하는 문자를 그대로 읽거나 처리할 수 없기 때문에 2진수와 문자를 일대일로 대응하는 규칙을 통하여 2진수로 문자를 처리합니다.
그러한 방법에는
- 아스키 코드
- EUC-KI
- UTF-8
- UTF-16
- UTF-32
가 존재합니다.
예시로 2진수인 0100'0001 을 여러 방법으로 표현해보면
- 10진수 = 65
- 16진수 = 0x41
- 문자 = A
로 표현이 됩니다.
문자열이 깨져보이거나 보이지 않는 이유는?
첫 컴퓨터는 영어와 일부 특수 문자만 지원하였으나 여러 국가에서 컴퓨터를 사용하게 되어 국가별로 사용하는 언어를 표현하고자 독자적인 규칙을 사용하기 시작하였습니다.
그러나 모든 개발 환경이 동일하지 않고 규칙이 달라 서로 호환되지 않는 환경으로 한국에서는 독자적으로 만든 EUC-KR을 사용하였고 이는 아직도 어떠한 오래된 시스템에 존재합니다.
다음으로는 인코딩의 방법들에 대하여 알아보겠습니다.
1. 아스키 코드
아스키 코드는 처음으로 표준을 정립한 문자열 인코딩 방식으로 아직까지 많이 사용합니다.
사용가능한 문자의 종류에는 대, 소문자, 아라비아 숫자, 공백 및 특수 문자를 0 ~ 127까지 숫자를 통하여 사용이 가능합니다.
하지만 아스키 코드로는 영어를 제외한 다른 언어의 표현할 수 없었고 그러하여 독자적인 규칙들이 만들어지기 시작하였습니다.
2. EUC-KR(CP949)
우리나라에서는 컴퓨터로 한글을 표현하는 방법으로 EUC-KR 문자 집합을 만들었습니다.
한국 산업 표준으로 지정된 한국어 문자 집합으로 문자 하나를 표현하기 위해 2바이트를 사용합니다.
가를 기준으로 설명을 하면
B0A0 코드 줄의 두번째 칸에 있으므로 1바이트를 더하여 B0A1 이 곧 '가'를 의미하게 됩니다.
EUC-KR은 모든 글자가 완성된 형태로만 존재하는 '완성형' 코드이어서 EUC-KR에 등재되지 않은 일부 한글은 표현할 수 없습니다.
영문자 'Hello'는 5바이트
'안녕하세요'는 10바이트가 사용이 되게 되고(한글은 2byte)
그러하여 문자열의 길이와 실제 사용된 버퍼의 길이는 다른 경우가 많습니다.
실제 문자열 길이 = 사람 눈에 보이는 문자 길이
버퍼 길이 = 컴퓨터가 문자를 표현하는 데 사용한 바이트 수
*개발 환경에서는 실제 문자열 길이와 컴퓨터가 할당하는 버퍼 크기를 동일하게 취급해 생기는 버그가 많으므로 주의해야 합니다.
다음은 유니코드에 대하여 알아보겠습니다.