Back

문자 인코딩의 이해: ASCII, Unicode, 그리고 UTF-8

텍스트 파일을 열었는데 é 같은 이상한 문자나 기호들이 가득한 것을 본 적이 있나요?

이것을 Mojibake (글자 깨짐)라고 하며, 컴퓨터가 어떤 "문자 인코딩"을 사용해야 할지 혼란스러워할 때 발생합니다.

그렇다면 문자 인코딩이란 정확히 무엇일까요? 컴퓨터가 텍스트를 처리하는 기본 원리를 살펴보겠습니다.

1. 컴퓨터는 숫자만 압니다

가장 낮은 레벨에서 컴퓨터는 오직 0과 1, 즉 이진수만 이해합니다.
텍스트를 저장하려면 각 문자에 숫자를 할당하는 지도가 필요합니다.

  • A -> 65
  • B -> 66
  • ! -> 33

이 매핑 시스템을 **문자 집합 (Character Set)**이라고 합니다.

2. ASCII: 미국의 표준 (1963)

가장 널리 사용된 최초의 표준은 **ASCII (American Standard Code for Information Interchange)**였습니다.

7비트를 사용하여 128개의 문자를 표현했습니다:

  • 영문자 (A-Z, a-z)
  • 숫자 (0-9)
  • 기본 문장 부호
  • 제어 코드 (줄바꿈, 탭)

영어권 사용자들에게는 훌륭했습니다. 하지만 나머지 세상은 어땠을까요?
ASCII는 악센트(é, ñ)는 고사하고 한글이나 한자, 이모지를 표현할 방법이 없었습니다.

3. "확장 ASCII"의 혼란

다른 언어를 지원하기 위해 각 지역마다 ASCII를 8비트로 확장한 독자적인 규격을 만들었습니다.

  • ISO-8859-1 (Latin-1): 서유럽 악센트 추가.
  • Windows-1252: Latin-1과 비슷하지만 약간의 차이 있음.
  • Shift_JIS: 일본어용.
  • EUC-KR: 한국어용.

문제점:
EUC-KR로 저장된 파일을 ISO-8859-1로 열면 쓰레기 값처럼 보입니다. 모두를 아우르는 단일 표준이 없었습니다.

4. Unicode: 하나로 통일하다

이 혼란을 해결하기 위해 Unicode가 탄생했습니다. 목표는 세상의 모든 언어의 모든 문자에 고유한 번호(Code Point)를 부여하는 것입니다.

  • A -> U+0041
  • é -> U+00E9
  • -> U+D55C
  • 💩 -> U+1F4A9

유니코드는 현재 149,000개 이상의 문자를 정의하고 있습니다.

하지만 유니코드는 숫자의 목록일 뿐입니다. 그 숫자를 바이트로 어떻게 저장할지는 알려주지 않습니다. 여기서 인코딩이 등장합니다.

5. UTF-8: 획기적인 해결책

"그냥 모든 문자에 32비트(4바이트)를 쓰면 되지 않나?"라고 생각할 수 있습니다 (이것이 UTF-32입니다).
하지만 그렇게 하면 8비트만 필요한 영어 텍스트의 파일 크기가 4배로 늘어납니다.

여기서 **UTF-8 (Unicode Transformation Format - 8-bit)**이 등장합니다.

이것은 가변 길이 인코딩입니다:

  1. 표준 ASCII 문자1바이트를 사용합니다. (ASCII와 하위 호환!)
  2. 유럽 문자2바이트를 사용합니다.
  3. **아시아 문자 (한글, 한자 등)**는 3바이트를 사용합니다.
  4. 이모지4바이트를 사용합니다.

작동 원리

  • 바이트가 0으로 시작하면: 1바이트 ASCII 문자입니다.
  • 110으로 시작하면: 2바이트 시퀀스의 시작입니다.
  • 1110으로 시작하면: 3바이트 시퀀스의 시작입니다.

이 기발한 설계 덕분에 UTF-8은 영어에 효율적이면서도(ASCII와 크기 동일) 전 세계의 모든 문자를 지원할 수 있습니다.

결론

오늘날 UTF-8은 지배적인 표준이며, 웹사이트의 98% 이상이 사용합니다.

파일을 저장할 때는 항상 UTF-8 (BOM 없음)을 선택하세요. 그러면 언제 어디서나, 어떤 기기에서든 당신의 텍스트를 읽을 수 있습니다.

Pro Tip: é 대신 é가 보인다면, 보통 UTF-8 파일이 Windows-1252로 잘못 읽히고 있다는 뜻입니다. `` 같은 것이 보인다면, 바이너리 파일이나 호환되지 않는 인코딩이 텍스트로 읽히고 있다는 뜻입니다.

TechEncodingUnicodeCS Fundamentals

관련 도구 둘러보기

Pockit의 무료 개발자 도구를 사용해 보세요