본문으로 건너뛰기
Case Converter Online
ko

UTF-8 인코딩과 디코딩

어떤 텍스트든 UTF-8로 어떤 바이트가 되는지 정확히 보고, 바이트를 다시 문자로 디코딩하고, café 같은 깨진 글자를 복구합니다. 문자마다 코드 포인트도 함께 표시합니다.

양방향으로 작동합니다. 오른쪽에 붙여넣는 값에 맞는 바이트 형식을 고르세요.

문자별 보기

문자코드 포인트UTF-8 바이트바이트

UTF-8이란

컴퓨터의 모든 텍스트는 숫자로 저장됩니다. 유니코드(Unicode)는 각 문자에 코드 포인트라는 번호를 붙인 거대한 목록입니다. 글자 A는 U+0041, é는 U+00E9, 유로 기호 €는 U+20AC, 한글 가는 U+AC00입니다. UTF-8은 이 코드 포인트를 바이트로 바꾸는 규칙이고, UTF-8 인코딩 변환기는 그 결과를 눈으로 확인하게 해 줍니다.

UTF-8은 웹, JSON, 대부분의 프로그래밍 언어, 최신 운영체제의 표준 인코딩입니다. 가장 큰 장점은 일반 ASCII 텍스트가 바뀌지 않는다는 점입니다. A는 여전히 1바이트 41입니다. 다른 문자는 2, 3, 4바이트를 쓰며, 이 바이트들은 모두 128 이상이라 ASCII와 헷갈릴 일이 없습니다.

한국어 환경에서는 예전부터 쓰던 EUC-KR(CP949) 인코딩과 UTF-8이 섞여 글자가 깨지는 일이 많습니다. 이 도구는 UTF-8만 다룹니다. 한글 한 글자는 UTF-8로 항상 3바이트이고, EUC-KR에서는 2바이트입니다.

UTF-8 도구 사용 방법

인코딩. 텍스트 입력란에 입력하면 UTF-8 바이트 입력란에 바이트가 나타납니다. 복사를 눌러 가져가세요.

디코딩. UTF-8 바이트 입력란에 바이트를 붙여넣으면 왼쪽에 문자가 나타납니다. 붙여넣는 값에 맞게 바이트 형식을 맞춰야 합니다.

바이트 형식은 바이트를 쓰는 방법 여섯 가지를 제공합니다.

  • 16진수 바이트: C3 A9: 읽고 디버깅할 때
  • 이스케이프: \xC3\xA9: 코드의 문자열 리터럴에 넣을 때
  • 퍼센트: %C3%A9: 웹 주소에서 쓰는 형식
  • 10진수: 195 169: 바이트 배열용
  • 2진수: 11000011 10101001: 비트 배치를 공부할 때
  • 깨진 텍스트: é (글자 깨짐 복구): 잘못된 인코딩으로 읽혀 깨진 텍스트를 복구할 때

문자별 보기. 도구 아래의 표는 모든 문자를 코드 포인트, UTF-8 바이트, 바이트 수와 함께 보여 줍니다. 요약에는 전체 글자 수와 바이트 수가 나옵니다. 공백, 탭, 줄바꿈은 이름으로 표시되어 눈에 보입니다.

UTF-8의 작동 원리

바이트 수는 코드 포인트의 크기에 따라 정해집니다.

코드 포인트 바이트 비트 패턴
U+0000 ~ U+007F 1 0xxxxxxx
U+0080 ~ U+07FF 2 110xxxxx 10xxxxxx
U+0800 ~ U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx
U+10000 ~ U+10FFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

첫 바이트가 뒤에 몇 바이트가 이어지는지 알려 주고, 뒤따르는 바이트는 모두 10으로 시작합니다. 그래서 UTF-8은 자기 동기화가 됩니다. 데이터 흐름의 중간에서 읽기 시작해도 프로그램이 다음 문자의 시작을 항상 찾을 수 있습니다.

한글 완성형 음절 11,172자는 U+AC00(가)부터 U+D7A3(힣)까지로, 모두 3바이트 구간에 들어갑니다. 그래서 가는 EA B0 80, 힣은 ED 9E A3입니다. 호환용 자모 ㄱ(U+3131)도 3바이트로 E3 84 B1입니다.

예시

문자 코드 포인트 UTF-8 16진수 10진수
A U+0041 41 65
é U+00E9 C3 A9 195 169
ñ U+00F1 C3 B1 195 177
ß U+00DF C3 9F 195 159
€ U+20AC E2 82 AC 226 130 172
日 U+65E5 E6 97 A5 230 151 165
엄지척 이모지 U+1F44D F0 9F 91 8D 240 159 145 141

한글 단어 한글은 이 도구에서 다음과 같이 인코딩됩니다.

바이트 형식 결과
16진수 바이트 ED 95 9C EA B8 80
이스케이프 \xED\x95\x9C\xEA\xB8\x80
퍼센트 %ED%95%9C%EA%B8%80
10진수 237 149 156 234 184 128
2진수 11101101 10010101 10011100 11101010 10111000 10000000

깨진 글자(모지바케) 복구

모지바케(mojibake)는 UTF-8 바이트를 Windows-1252나 Latin-1로 읽었을 때 생기는 뒤죽박죽 글자입니다. 바이트 하나하나가 각각 문자로 바뀌기 때문에 2바이트 글자는 이상한 기호 두 개가 됩니다.

올바른 텍스트 깨져 보이는 모습
café café
naïve naïve
It’s It’s
€ €

깨진 텍스트 형식이 이 문제를 되돌립니다. 깨진 문자를 하나씩 원래 바이트로 되돌린 다음 UTF-8로 디코딩합니다. 이런 실수로는 생길 수 없는 문자가 섞여 있으면 추측하지 않고 그 사실을 알려 줍니다. 한글도 같은 방식으로 깨지면 복구됩니다. 예를 들어 한글을 붙여넣으면 한글이 됩니다. 다만 한글이 EUC-KR(CP949)과 UTF-8 사이에서 잘못 읽혀 깨진 경우는 이 기능이 다루는 Windows-1252 오류와 원인이 달라서 복구되지 않습니다.

팁과 한계

  • 파일을 UTF-8로 저장하세요. 글자 깨짐은 대부분 한 인코딩으로 저장한 파일을 다른 인코딩으로 열면서 시작됩니다. 편집기에서 저장할 때 UTF-8을 고르세요.
  • 인코딩을 선언하세요. HTML에서는 페이지 맨 위에 <meta charset="utf-8">을 넣습니다.
  • Excel과 CSV 파일. 예전 Excel은 CSV의 인코딩을 추측합니다. “CSV UTF-8” 형식으로 저장하면 악센트 문자나 한글이 깨지는 일을 막을 수 있습니다.
  • 복구는 한 번에 한 단계입니다. 두 번 깨진 텍스트는 복구를 두 번 해야 합니다.
  • 표는 최대 500자까지 보여 줍니다. 페이지를 빠르게 유지하기 위해서입니다. 바이트 수는 항상 텍스트 전체를 기준으로 셉니다.

다른 방법으로 인코딩하기

Python. 'café'.encode('utf-8')은 b'caf\xc3\xa9'를 돌려줍니다. 깨진 글자를 고치려면 'café'.encode('cp1252').decode('utf-8')을 실행하면 café가 나옵니다.

JavaScript. new TextEncoder().encode('é')는 바이트 195와 169를 돌려줍니다. new TextDecoder().decode(bytes)로 다시 문자로 바꿉니다.

명령줄. UTF-8 터미널에서 echo -n é | xxd를 실행하면 바이트 c3a9가 보입니다. 파일 전체를 바꿀 때는 iconv -f WINDOWS-1252 -t UTF-8을 씁니다.

관련 도구

일반 16진수 바이트를 디코딩하려면 16진수 텍스트 변환기를 쓰세요. 링크 속 퍼센트 인코딩 바이트는 URL 디코더가 처리합니다. 비트를 전부 보고 싶다면 2진수 변환기를 사용해 보세요.

UTF-8 인코더 자주 묻는 질문

UTF-8에서 한 글자는 몇 바이트인가요?

1바이트에서 4바이트 사이입니다. 영문자, 숫자, 기본 문장 부호는 1바이트입니다. 악센트가 붙은 라틴 문자, 그리스 문자, 키릴 문자, 히브리 문자, 아랍 문자는 대부분 2바이트입니다. 한글, 한자, 일본어 문자 대부분과 유로 기호 같은 기호는 3바이트이고, 이모지는 보통 4바이트입니다.

café나 It’s 같은 텍스트는 어떻게 고치나요?

바이트 형식을 깨진 텍스트: é (글자 깨짐 복구)로 정하고 깨진 텍스트를 오른쪽 입력란에 붙여넣으세요. 왼쪽에 복구된 텍스트가 나타납니다. café는 café로, It’s는 It’s로 돌아옵니다.

유니코드와 UTF-8은 무엇이 다른가요?

유니코드는 모든 문자에 코드 포인트라는 번호를 붙입니다. 유로 기호는 U+20AC, 한글 ‘가’는 U+AC00입니다. UTF-8은 그 번호를 바이트로 저장하는 방식 중 하나입니다. 유로 기호는 UTF-8로 E2 82 AC, ‘가’는 EA B0 80으로 저장됩니다.

텍스트의 바이트 수가 글자 수보다 많은 이유는 무엇인가요?

기본 ASCII 밖의 문자는 한 글자에 여러 바이트가 필요하기 때문입니다. Café €5에 엄지척 이모지를 더하면 9글자지만 15바이트입니다. ‘안녕하세요’는 5글자인데 15바이트입니다. 문자 표 위의 요약에 두 수가 모두 나옵니다.

코드와 데이터 도구 더 보기

전체 도구 보기