2진수 → 텍스트: 바이트를 풀어내고, 못 풀 때를 아는 법
이 변환이 하는 일
2진 바이트 열을 읽어 UTF-8 텍스트로 디코딩합니다. 여덟 비트가 한 바이트가 되고 한 문자가 여러 바이트를 차지할 수 있어서 바이트를 모아 함께 해독합니다. 진짜 일은 이 해독 단계에서 일어납니다. 바이트 경계는 문자 경계에 대해 아무것도 알려주지 않습니다.
디코더가 문자의 끝을 아는 방법
각 바이트의 선두 비트가 자기 역할을 알립니다. 0으로 시작하면 단독이고 110으로 시작하면 2바이트 문자의 시작, 1110은 3바이트, 11110은 4바이트 문자의 시작이며 연속 바이트는 10으로 시작합니다. 이 구조 덕분에 디코더가 문자 위치를 따로 통보받지 않고도 흐름을 따라갈 수 있습니다.
2진수 → 텍스트 변환표
바이트 열과 그것이 디코딩되는 텍스트입니다. 여러 바이트 행은 선두 비트 패턴이 제 몫을 하는 모습을 보여주고, 마지막 행은 인쇄 가능한 텍스트가 아닌 원시 바이트가 어떻게 보이는지 보여줍니다.
| 2진수 | 텍스트 |
|---|---|
| 01000001 | A |
| 01100001 | a |
| 01001000 01101001 | Hi |
| 01001111 01001011 | OK |
| 00110001 00110010 00110011 | 123 |
| 11100100 10111000 10101101 | 中 |
글자가 깨지는 이유
깨진 텍스트는 거의 항상 잘못된 인코딩으로 해독했거나 엉뚱한 위치에서 잘랐다는 뜻입니다. UTF-8을 1바이트 인코딩인 양 해독하면 3바이트 문자가 무관한 기호 셋으로 흩어지고, 앞에서 바이트 하나가 빠지면 뒤따르는 모든 문자가 밀립니다. 두 실패 모두 무작위 문장부호처럼 보이고 글자가 아니라 바이트를 봐야 진단됩니다.
바이트 묶음을 그대로 유지하세요
여덟 자리 묶음을 완전한 단위로 복사하세요. 바이트 중간에서 붙여 넣기 시작하면 디코더가 이해할 수 없는 열이 만들어지고, 이어지는 오류는 정확하지만 붙여 넣기가 어디서 시작됐는지에 대해서는 말해 주지 않습니다.
자주 묻는 질문
2진수를 다시 텍스트로 바꾸려면 어떻게 하나요?
2진수를 여덟 자리씩 나누고 각 묶음을 한 바이트로 본 다음 바이트를 UTF-8로 디코딩합니다. 알파벳 A는 01000001이라 묶음 하나가 문자 하나로 풀리고, 더 긴 열은 여러 묶음에 걸친 문자를 포함한 더 긴 문자열이 됩니다.
이상한 문자가 아니라 오류가 나오는 이유는 무엇인가요?
그 바이트 열이 올바른 UTF-8이 아니기 때문입니다. 중간에 잘렸거나 순서가 어긋났거나 아예 텍스트가 아닐 수 있습니다. 거부하는 것은 의도된 동작입니다. 대체 문자를 끼워 넣으면 진짜 문제가 텍스트가 아니었다는 사실이 가려진 채 해독 문제처럼 보이는 출력이 나옵니다.
바이트 사이에 공백이 없는 2진수도 붙여 넣을 수 있나요?
됩니다. 길이가 8의 배수인 연속 문자열은 자동으로 바이트로 나뉘므로 구분자를 생략한 곳에서 복사한 2진수도 형식을 고치지 않고 변환됩니다. 띄어 쓴 형태와 붙여 쓴 형태는 같은 뜻입니다.
127을 넘는 바이트가 홀로 있으면 무슨 뜻인가요?
그것이 문자 자체가 아니라 여러 바이트 문자의 일부라는 뜻입니다. 그 범위의 바이트가 홀로 있으면 올바른 UTF-8 의미가 없어 거부되며, 속해 있던 문자가 불완전하므로 그 판단이 맞습니다.
어떤 언어의 텍스트든 되나요?
UTF-8이 표현할 수 있는 것은 모두 됩니다. 악센트가 있는 라틴 문자와 키릴 문자, 아랍 문자, 중국어, 일본어, 한국어, 이모지까지 사실상 현재 쓰이는 모든 문자 체계가 포함됩니다. 이 사이트의 텍스트 → 2진수 도구가 만든 열은 언제나 처음 텍스트 그대로 되돌아옵니다.