16진수 텍스트 변환 방법과 한글이 UTF-8, EUC-KR에서 다른 값이 되는 이유

30 10월, 2026 • 가이드 • 42 조회수 • 2 분 읽음

책상 위 노트북 화면에 격자 무늬 데이터가 떠 있고 옆에 모눈 공책과 연필이 놓인 모습

16진수 텍스트 변환을 한글 예시로 설명합니다. '가'가 유니코드로는 U+AC00, UTF-8로는 EA B0 80, EUC-KR로는 B0 A1이 되는 이유와 결과가 안 나오거나 글자가 깨질 때 해결하는 법을 정리했습니다.

Digily Link의 16진수 변환기는 입력한 텍스트를 UTF-8 바이트로 바꿔 소문자 16진수로 보여 줍니다. 그래서 '가'는 eab080이 됩니다. 다만 변환 전에 입력을 정리하는 단계가 있어서, 따옴표나 HTML 태그, 앞뒤 공백이 들어간 입력은 원문을 그대로 인코딩한 값과 다를 수 있습니다. 다른 자료에서 AC00이나 B0A1을 봤다면, 그 값이 틀렸다기보다 다른 기준으로 적은 값일 가능성이 큽니다.

AC00은 '가'에 붙은 유니코드 번호(코드 포인트 U+AC00)입니다. EA B0 80은 그 글자를 UTF-8로 저장한 바이트이고, B0 A1은 EUC-KR이나 CP949로 저장한 바이트입니다. 글자는 하나지만 어떤 방식으로 저장하느냐에 따라 16진수가 달라집니다. 이 도구에는 인코딩을 고르는 기능이 없어서 결과는 언제나 UTF-8 값입니다. 참고로 Digily Link는 저희가 만든 서비스입니다.

16진수 변환기로 한글을 16진수로 바꾸는 순서

'콘텐츠' 칸에 글자를 넣고 '유형'을 고른 뒤 '제출'을 누르면 변환이 끝납니다. 유형은 바꾸려는 방향에 따라 '16진수로'와 '텍스트로' 가운데 하나를 고르면 됩니다.

텍스트를 16진수로 바꾸기

  1. 16진수 변환기 페이지를 엽니다.
  2. '콘텐츠' 칸에 바꿀 텍스트를 입력합니다. 여기서는 '한글'을 넣어 보겠습니다.
  3. '유형'에서 '16진수로'를 고릅니다.
  4. '제출'을 누릅니다.
  5. '16진수'라는 제목 아래에 결과가 나오면 '클립보드에 복사'를 눌러 복사합니다.

'한글'을 넣으면 ed959ceab880이 나옵니다. 결과는 모두 소문자이고 바이트 사이에 공백이 없습니다. 두 자리씩 끊어 읽으면 ed 95 9c가 '한', ea b8 80이 '글'입니다. 문서나 로그에 ED 95 9C처럼 대문자에 공백을 넣어 적은 값이 있다면, 표기만 다를 뿐 같은 바이트입니다.

16진수를 텍스트로 되돌리기

  1. '콘텐츠' 칸에 eab080처럼 공백 없이 이어진 16진수를 붙여 넣습니다.
  2. '유형'에서 '텍스트로'를 고릅니다.
  3. '제출'을 누르면 '텍스트'라는 제목 아래에 결과가 나옵니다.

eab080을 넣으면 '가'가 나오고, 대문자로 쓴 EAB080을 넣어도 똑같이 '가'가 됩니다. 텍스트로 바꿀 때는 공백과 0x 없이 두 자리씩 이어진 16진수만 넣으세요. 48 65처럼 공백이 있으면 정상적으로 변환되지 않습니다.

같은 한글이 유니코드, UTF-8, EUC-KR에서 서로 다른 16진수가 되는 이유

유니코드는 문자마다 코드 포인트를 정해 둔 표준이고, UTF-8과 EUC-KR은 그 문자를 바이트로 표현하는 인코딩 방식입니다. 그래서 같은 글자라도 값이 달라집니다. 같은 코드 포인트라도 어떤 인코딩을 쓰느냐에 따라 바이트 표현이 달라지는 것입니다.

2026년 10월 29일 기준 유니코드 컨소시엄의 Blocks.txt(Blocks-18.0.0, 2026년 7월 8일 판)는 AC00부터 D7AF까지를 Hangul Syllables 블록으로 정하고 있습니다. 실제 한글 음절은 AC00부터 D7A3까지 11,172자입니다.

아래 표는 저희가 2026년 10월 29일 Python 3.13으로 직접 뽑아 다시 확인한 값입니다. 영문 A는 비교를 위해 넣었습니다.

문자유니코드 코드 포인트UTF-8EUC-KR / CP949UTF-16BE
AU+0041414100 41
가U+AC00EA B0 80B0 A1AC 00
한글U+D55C U+AE00ED 95 9C EA B8 80C7 D1 B1 DBD5 5C AE 00
안녕하세요U+C548 U+B155 U+D558 U+C138 U+C694EC 95 88 EB 85 95 ED 95 98 EC 84 B8 EC 9A 94BE C8 B3 E7 C7 CF BC BC BF E4C5 48 B1 55 D5 58 C1 38 C6 94
똠U+B620EB 98 A0CP949 8C 63 (KS X 1001 2바이트 완성형에는 없음)B6 20

표에서 몇 가지를 알 수 있습니다. 영문 A는 UTF-8과 EUC-KR에서 똑같이 41이라서, 영문과 숫자만 있는 텍스트는 이 두 인코딩 사이에서는 16진수가 같게 나옵니다. UTF-16BE에서는 00 41처럼 달라집니다. 차이는 한글에서 생깁니다. '안녕하세요' 다섯 글자는 UTF-8로 15바이트, EUC-KR로 10바이트입니다. 한글의 UTF-16BE 값은 코드 포인트와 숫자가 똑같아서 AC 00을 유니코드 번호로 착각하기 쉽습니다.

그래서 가지고 있는 16진수가 어떤 인코딩인지 짐작하려면 몇 바이트씩 묶이는지 살펴보면 도움이 됩니다. 한글 한 글자가 세 바이트씩 묶이고 첫 바이트가 EA부터 ED 사이라면 UTF-8일 가능성이 높습니다. B0 A1처럼 두 바이트씩 묶인다면 EUC-KR이나 CP949, 아니면 UTF-16을 의심해 볼 만합니다. 다만 바이트 길이나 첫 바이트만으로 인코딩을 확정할 수는 없으니, 후보 인코딩으로 직접 읽어 보고 비교하세요.

같은 모양의 글자인데 16진수가 다르다면 유니코드 정규화도 확인해 보세요. '가'는 완성형 U+AC00(UTF-8 EA B0 80)으로도, 초성 U+1100과 중성 U+1161의 조합(UTF-8 E1 84 80 E1 85 A1)으로도 쓸 수 있습니다. 유니코드 정규화 형식 문서(UAX #15)(2026년 10월 29일 확인)가 이런 NFC와 NFD의 차이를 설명합니다.

한글 음절이 UTF-8에서 3바이트가 되는 원리

한글 완성형 음절은 U+AC00부터 U+D7A3까지에 있으므로 UTF-8에서 음절 하나가 3바이트가 됩니다. UTF-8 규격인 RFC 3629의 3장(2026년 10월 29일 확인)은 U+0000부터 U+10FFFF까지의 글자를 1바이트에서 4바이트로 저장하도록 정하고, 번호 범위별로 비트를 배치하는 틀을 제시합니다.

코드 포인트 범위바이트 수비트 배치
U+0000부터 U+007F까지10xxxxxxx
U+0080부터 U+07FF까지2110xxxxx 10xxxxxx
U+0800부터 U+FFFF까지(U+D800부터 U+DFFF까지 제외)31110xxxx 10xxxxxx 10xxxxxx
U+10000부터 U+10FFFF까지411110xxx 10xxxxxx 10xxxxxx 10xxxxxx

'가'를 이 틀에 직접 넣어 보면 EA B0 80이 어떻게 나오는지 알 수 있습니다.

  1. U+AC00을 2진수로 쓰면 1010 1100 0000 0000으로, 모두 16비트입니다.
  2. 이 16비트를 앞에서부터 4비트, 6비트, 6비트로 나누면 1010, 110000, 000000이 됩니다.
  3. 3바이트 틀의 x 자리에 차례로 채우면 11101010, 10110000, 10000000이 됩니다.
  4. 세 바이트를 16진수로 바꾸면 EA, B0, 80입니다.

첫 바이트 앞의 1110은 이 문자가 3바이트로 인코딩되었다는 표시이고, 뒤따르는 두 바이트 앞의 10은 이어지는 바이트라는 표시입니다. 프로그램은 첫 바이트 EA를 보고 뒤에 두 바이트가 더 이어진다는 것을 압니다. 영문 A(U+0041)는 표의 첫 줄에 해당하므로 41 한 바이트로 끝납니다.

EUC-KR과 CP949의 관계, 그리고 '똠'이 다르게 나오는 이유

웹 브라우저는 EUC-KR과 CP949(windows-949)를 같은 인코딩의 다른 이름으로 처리합니다. 근거는 웹 인코딩 규격인 WHATWG Encoding Standard입니다.

2026년 10월 29일 기준 이 규격은 EUC-KR 색인이 "KS X 1001 표준과 통합형 한글 코드(Unified Hangul Code), 흔히 둘을 합쳐 Windows Codepage 949라고 부르는 것"과 일치한다고 설명합니다(원문 "This matches the KS X 1001 standard and the Unified Hangul Code, more commonly known together as Windows Codepage 949."). 같은 문서는 euc-kr, ks_c_5601-1987, windows-949, korean 등 여러 이름을 하나의 EUC-KR 인코딩 레이블로 묶어 두고 있습니다.

차이는 KS X 1001 완성형에 없는 음절에서 드러납니다. 이런 음절은 CP949 확장 영역으로 표현됩니다. 앞의 표에서 '똠'은 CP949로 8C 63인데, KS X 1001의 2바이트 완성형에는 이 글자가 없습니다. 프로그램이 EUC-KR을 KS X 1001 범위로만 다룬다면 '똠' 같은 글자를 저장하지 못하거나 예상과 다른 바이트를 낼 수 있습니다. 똑같이 EUC-KR이라는 이름을 쓰더라도 프로그램마다 확장 영역을 다루는 방식이 다를 수 있으니, 결과가 이상하면 CP949로 지정해 다시 확인해 보세요. 예를 들어 파이썬에서는 euc_kr과 cp949가 별도 코덱이어서, 저희가 2026년 10월 29일 Python 3.13으로 확인했을 때 '똠'은 cp949로 8c63, euc_kr로는 자모를 조합한 8바이트 a4d4a4a8a4c7a4b1이 나왔습니다.

WHATWG는 같은 규격 4.2절에 "Authors must use the UTF-8 encoding."이라고 적어, 웹 문서를 만드는 사람은 UTF-8을 써야 한다고 정하고 있습니다. 이 요구는 웹 문서와 규격이 다루는 범위에 대한 것이지만, 일반 텍스트 파일도 특별한 호환성 문제가 없다면 UTF-8을 쓰는 편이 좋습니다. 기존 시스템 때문에 EUC-KR이나 CP949 값이 필요하다면 이 도구가 아니라 해당 인코딩을 지정할 수 있는 프로그램을 쓰세요. 아래 파이썬 예시도 그런 방법 가운데 하나입니다.

'텍스트로' 변환에서 결과가 없거나 글자가 깨지는 원인

'텍스트로' 변환하려면 공백 없이 이어 쓴 짝수 자리의 16진수를 넣어야 합니다. 공백이나 0x가 섞여 있거나 자릿수가 홀수면 정상적으로 변환되지 않습니다. 결과는 나왔는데 글자가 깨진다면, 대개 16진수를 만든 인코딩과 읽는 인코딩이 서로 다른 경우입니다.

'텍스트로'에 넣은 값결과원인고치는 법
eab080가올바른 UTF-8그대로 쓰면 됩니다
EAB080가대문자도 받습니다그대로 쓰면 됩니다
ea b0 80변환되지 않음바이트 사이 공백공백을 모두 지웁니다
0xEAB080변환되지 않음앞에 붙은 0x0x를 지웁니다
eab08변환되지 않음자릿수가 홀수복사할 때 빠진 자리를 찾습니다
b0a1깨진 문자나 빈 결과가 나올 수 있음EUC-KR 값을 UTF-8로 읽음CP949로 해석합니다

공백이 들어간 값. 로그나 패킷 분석 도구에서는 48 65 6c 6c 6f처럼 바이트마다 띄어 쓴 값을 자주 보게 됩니다. 이 값을 그대로 붙여 넣으면 정상적으로 변환되지 않으니, 메모장의 바꾸기 기능 등으로 공백을 지워 48656c6c6f로 만든 뒤 넣으세요.

0x가 붙은 값. 프로그래밍 코드에서는 16진수 앞에 0x를 붙이곤 하는데, 0x48처럼 넣으면 정상적으로 변환되지 않습니다. 0xEA 0xB0 0x80처럼 바이트마다 붙어 있다면 0x와 공백을 모두 지워야 합니다.

자릿수가 홀수인 값. 한 바이트는 16진수 두 자리이므로 전체 자릿수는 짝수여야 합니다. 486처럼 세 자리면 정상적으로 변환되지 않습니다. 긴 값을 복사하다가 앞이나 끝이 잘리는 경우가 많으니 원본과 길이를 비교해 보세요.

EUC-KR 값을 넣은 경우. B0 A1은 EUC-KR이나 CP949로는 '가'지만 올바른 UTF-8 바이트는 아닙니다. 이 도구는 16진수를 UTF-8로 읽기 때문에 깨진 문자나 빈 결과가 나올 수 있습니다. 오래된 시스템이나 윈도우 프로그램에서 가져온 값이라면 CP949로 해석해야 합니다. 방법은 아래 코드 예시에서 확인하세요.

16진수 변환기가 입력을 처리하는 방식과 한계

이 도구는 변환 전에 입력을 정리하는 단계를 거칩니다. 그래서 따옴표나 '<'가 들어간 문장은 표준 UTF-8 값과 다른 결과가 나옵니다. 아래 예시는 도구와 같은 처리 과정을 저희가 2026년 10월 29일에 재현해 확인한 값이며, 실제 사이트에서 직접 제출해 본 결과는 아닙니다.

  • 따옴표. 작은따옴표와 큰따옴표는 변환 전에 HTML 문자 참조로 바뀌므로, 따옴표가 들어간 문장의 16진수는 표준 UTF-8 값과 다릅니다. 작은따옴표는 &#39;, 큰따옴표는 &#34;로 바뀝니다. 그래서 it's는 표준값 69742773이 아니라 6974262333393b73으로, "OK"는 262333343b4f4b262333343b로 나옵니다. 이런 문장은 아래 코드로 확인하세요.
  • '<'와 HTML 태그. HTML 태그는 지워지고, 닫히지 않은 '<'가 있으면 그 뒤의 내용까지 사라집니다. a<b를 넣으면 a만 남아 61이 나옵니다.
  • 앞뒤 공백. 텍스트 맨 앞과 맨 끝의 공백은 잘려 나가므로 결과에 공백 바이트가 들어가지 않습니다.
  • 인코딩. 결과는 항상 UTF-8 바이트이며, EUC-KR이나 CP949 값은 만들지 않습니다.
  • 처리 위치. 입력한 텍스트는 서버로 보내져 처리됩니다. 변환한 텍스트를 따로 저장하지 않도록 만들어져 있고, 도구 사용 횟수만 기록합니다. 그래도 비밀번호처럼 민감한 값은 넣지 않는 것이 좋습니다.

같은 바이트를 다른 진법으로 보고 싶다면 다른 도구를 쓰면 됩니다. 바이트를 10진수 값으로 보려면 아스키 변환기를, 0과 1로 된 2진수로 보려면 이진 변환기를 쓰세요.

파이썬과 자바스크립트로 16진수 값을 직접 확인하는 방법

따옴표가 섞인 문장이나 EUC-KR, CP949 값은 내 컴퓨터에서 짧은 코드로 확인하는 편이 정확합니다. 파이썬은 인코딩 이름만 바꿔 주면 되고, 자바스크립트는 브라우저 개발자 도구의 콘솔에서 바로 실행할 수 있습니다.

파이썬

  • "가".encode("utf-8").hex() 를 실행하면 eab080이 나옵니다.
  • "가".encode("cp949").hex() 를 실행하면 b0a1이 나옵니다.
  • "똠".encode("cp949").hex() 를 실행하면 8c63이 나옵니다.
  • "it's".encode("utf-8").hex() 를 실행하면 따옴표가 바뀌지 않은 표준값 69742773이 나옵니다.
  • bytes.fromhex("b0a1").decode("cp949") 를 실행하면 '가'가 나옵니다. 깨지던 EUC-KR 값을 되살릴 때 이 방법을 쓰면 됩니다.

자바스크립트

[...new TextEncoder().encode("가")].map(b=>b.toString(16).padStart(2,"0")).join("") 를 콘솔에 붙여 넣으면 "eab080"이 나옵니다. WHATWG Encoding Standard에 따르면 TextEncoder는 UTF-8만 지원하므로 EUC-KR이나 CP949 값이 필요하면 파이썬 예시를 쓰세요.

도구로 바로 해 보고 싶다면 16진수 변환기에서 한글을 UTF-8 16진수로 바꿔 보기를 눌러 '가'나 '한글'을 넣어 보세요. eab080과 ed959ceab880이 나온다면 이 글의 표와 같은 UTF-8 값입니다.

자주 묻는 질문

한글 '가'를 16진수로 바꾸면 왜 AC00이 아니라 EAB080이 나오나요?

AC00은 유니코드가 '가'에 붙인 번호이고, EAB080은 그 번호를 UTF-8 규칙에 따라 3바이트로 저장한 값입니다. 변환기는 저장된 바이트를 보여 주기 때문에 EAB080이 나옵니다. 번호를 적어야 하는 자리라면 U+AC00이라고 쓰면 됩니다.

16진수를 텍스트로 바꿨는데 글자가 깨지는 이유는 무엇인가요?

16진수를 만든 인코딩과 읽는 인코딩이 다를 가능성이 큽니다. 한글 한 글자가 두 바이트씩 묶인 값이라면 CP949로 읽어 보고, 복사하는 과정에서 일부가 잘리지 않았는지도 확인해 보세요.

16진수는 대문자로 써야 하나요, 소문자로 써야 하나요?

어느 쪽이든 같은 값입니다. 이 도구는 결과를 소문자로 보여 주고, '텍스트로' 변환에서는 대문자도 받습니다. 16진수 표기에 대한 기본 설명은 16진수 변환기 페이지의 안내에 정리돼 있습니다.

16진수로 바꾸면 내용이 암호화되나요?

아닙니다. 16진수는 같은 바이트를 다른 방식으로 적은 것일 뿐이어서, 이 글의 방법으로 누구나 원래 텍스트로 되돌릴 수 있습니다.

0개 평가 중 0