텍스트 2진수 변환: 글자가 0·1이 되는 법

내가 입력한 '가'라는 한 글자가 화면에서 왜 24개의 0과 1로 쏟아져 나오는지 궁금했다면, 답은 컴퓨터가 글자를 '바이트'라는 8비트 묶음 단위로 저장하기 때문입니다. 영문은 1바이트, 한글은 보통 3바이트, 이모지는 4바이트라서 한 글자가 여러 개의 8자리 2진수로 쪼개집니다.

이 글은 글자가 0과 1로 바뀌는 과정을 UTF-8 규칙 그대로 설명하고, 반대로 그 코드를 다시 글자로 되돌릴 때 자주 막히는 지점까지 검증 가능한 사실 위주로 정리합니다.

요약 ① 컴퓨터는 글자를 UTF-8 바이트로 바꾼 뒤, 각 바이트를 8자리 2진수 또는 2자리 16진수로 표현합니다. ② 영문 1바이트·한글 3바이트·이모지 4바이트라서, 한 글자가 여러 개의 8비트 묶음으로 나옵니다. ③ 복원은 2진수 8자리·16진수 2자리씩 끊어 읽으며, 자릿수가 안 맞거나 잘못된 바이트 조합이면 실패하거나 �로 표시됩니다.

'안녕'은 두 글자인데 왜 6바이트일까

텍스트 편집기에서 '안녕' 두 글자만 적고 UTF-8로 저장하면, 파일에는 6바이트가 들어갑니다. 글자는 분명히 두 개인데 용량은 그 세 배입니다.

여기서 "글자 수"와 "바이트 수"가 서로 다른 값이라는 사실이 드러납니다. 컴퓨터는 글자를 세는 게 아니라 바이트를 세서 저장하기 때문입니다.

한글 한 글자는 UTF-8에서 보통 3바이트를 차지합니다. 그래서 '안'이 3바이트, '녕'이 3바이트, 합쳐서 6바이트가 됩니다. 이 3배수가 어디서 나오는지 이해하면, 2진수로 바꿨을 때 왜 그렇게 긴 0과 1의 나열이 나오는지도 함께 풀립니다.

도구 없이 글자를 2진수로 바꾸는 방법

전 과정을 손으로도 할 수 있습니다. 순서는 세 단계입니다.

1단계 — 글자를 바이트로 바꾼다. 컴퓨터는 글자마다 정해진 번호(코드포인트)를 UTF-8 규칙에 따라 1~4개의 바이트로 나눕니다. 영문 'A'는 번호가 65번이고 1바이트, 한글 '가'는 3바이트로 나뉩니다.

2단계 — 각 바이트를 8자리 2진수로 적는다. 바이트 하나는 0부터 255까지의 값입니다. 이 값을 2진수로 쓰고 8자리가 안 되면 앞을 0으로 채웁니다. 'A'(65)는 2진수로 1000001이지만, 8자리에 맞추면 01000001이 됩니다.

3단계 — 바이트가 여럿이면 이어 붙인다. '가'는 바이트 값이 234·176·128 세 개이므로, 각각 11101010 · 10110000 · 10000000이 되고, 이어 붙이면 24자리가 됩니다.

16진수 표기와 값을 직접 확인하는 법

16진수는 더 단순합니다. 각 바이트를 2자리 16진수로 적으면 됩니다. 'A'는 41, '가'는 ea b0 80입니다. 8자리 2진수 한 바이트가 16진수로는 정확히 2자리에 대응합니다.

직접 확인하고 싶다면 브라우저 개발자 도구 콘솔에서 new TextEncoder().encode('가')를 실행하면 [234, 176, 128]이 나옵니다. 이 값이 각각 ea·b0·80이며, 파이썬에서는 '가'.encode('utf-8')로 같은 결과를 볼 수 있습니다.

문제는 글자가 많아지면 이 계산을 한 글자씩 반복해야 한다는 점입니다.

저희 도구로 확인하기.

텍스트 ↔ 2진수 변환기

설치나 회원가입 없이 브라우저에서 텍스트를 UTF-8 기준 2진수·16진수로 바꾸고, 반대로 코드를 다시 텍스트로 복원합니다.

복원할 때 자주 막히는 지점

2진수나 16진수 코드를 다시 글자로 되돌릴 때는 규칙이 정해져 있습니다. 복원기는 2진수는 8자리씩, 16진수는 2자리씩 끊어 각 묶음을 한 바이트로 읽습니다. 그래서 구분자(공백)는 있어도 되고 없어도 됩니다.

문제는 이 "끊어 읽기"가 성립하지 않을 때 생깁니다. 아래가 대표적인 경우입니다.

증상원인확인 방법
2진수가 글자로 안 바뀜전체 0/1 개수가 8의 배수가 아님8의 배수인지(한 바이트=8자리) 확인
16진수가 안 바뀜자릿수가 홀수짝수 자리인지(한 바이트=2자리) 확인
붙여 쓴 코드도 됨8비트·2자리씩 자동으로 끊음구분자는 있어도 없어도 무방
글자 대신 �가 나옴유효한 UTF-8이 아닌 바이트 조합원본 코드가 잘리거나 섞이지 않았는지 확인
16진수인데 2진수로 읽힘0과 1만 있어 자동 감지가 2진수로 판단형식을 직접 16진수로 지정

마지막 두 줄을 조금 더 풀어보겠습니다. 예를 들어 2진수 입력칸에 10000000 하나만 넣으면, 이는 홀로 쓰일 수 없는 바이트라 유효한 글자로 복원되지 않고 대체 문자 �로 표시됩니다. 코드가 온전한지 되짚어보라는 신호입니다.

또 자동 감지 모드는 입력에 0과 1만 있으면 2진수로 판단합니다. 그래서 '01'이나 '10' 같은 16진수 값은 2진수로 오인될 수 있으니, 이럴 때는 형식을 16진수로 직접 지정하면 됩니다. 참고로 바이트 수가 글자 수보다 큰 것은 오류가 아니라, 한글·이모지가 여러 바이트로 이뤄졌기 때문에 나타나는 정상 결과입니다.

정리

  • 컴퓨터는 글자를 UTF-8 바이트로 바꾸고, 각 바이트를 8자리 2진수 또는 2자리 16진수로 표현합니다.
  • 영문 1바이트·한글 3바이트·이모지 4바이트라서 한 글자가 여러 묶음으로 나뉘고, 바이트 수는 글자 수보다 커집니다.
  • 복원은 2진수 8자리·16진수 2자리씩 끊어 읽으므로 구분자는 없어도 됩니다.
  • 2진수 전체 길이가 8의 배수가 아니거나 16진수가 홀수 자리면 복원되지 않고 안내 메시지가 뜹니다.
  • 유효한 UTF-8이 아닌 바이트 조합은 대체 문자 �로 표시됩니다.
텍스트 ↔ 2진수 변환기

설치나 회원가입 없이 브라우저에서 텍스트를 UTF-8 기준 2진수·16진수로 바꾸고, 반대로 코드를 다시 텍스트로 복원합니다.

자주 묻는 질문

왜 한글 한 글자가 2진수로 24자리나 되나요?

한글은 UTF-8에서 보통 3바이트로 저장되고, 바이트 하나는 8자리 2진수이기 때문입니다. 3바이트 × 8자리 = 24자리입니다. 영문은 1바이트라 8자리, 이모지는 4바이트라 32자리로 나옵니다.

구분자(공백) 없이 붙여 쓴 2진수도 복원되나요?

됩니다. 2진수는 8자리씩, 16진수는 2자리씩 자동으로 끊어 읽습니다. 다만 전체 길이가 2진수는 8의 배수, 16진수는 짝수 자리여야 하며, 자릿수가 맞지 않으면 안내 메시지가 표시됩니다.

복원했더니 �(네모·물음표) 기호가 나옵니다. 왜 그런가요?

바이트 조합이 유효한 UTF-8이 아니기 때문입니다. 예를 들어 홀로 쓰일 수 없는 바이트가 섞이면 복원기가 원래 글자를 알 수 없어 대체 문자 �로 표시합니다. 원본 코드가 중간에 잘리거나 다른 값과 섞이지 않았는지 확인하면 됩니다.

2진수와 16진수는 뭐가 다른가요?

같은 바이트를 다르게 적은 것이라 담긴 정보량은 같습니다. 한 바이트를 2진수로는 8자리, 16진수로는 2자리로 표현합니다. 16진수는 짧게 보기에 편하고, 2진수는 비트 하나하나를 그대로 보여준다는 차이가 있습니다.

가격 보기카톡 무료 상담