유니코드 변환기 — 텍스트를 U+ 코드, 유니코드 이스케이프, UTF-8 바이트로 변환
텍스트와 유니코드 코드·이스케이프·UTF-8 바이트를 서로 변환
브라우저에서 처리 · 서버로 전송되지 않음
보이는 글자 6개 · 코드 포인트 6개 · UTF-16 길이 7
변환 결과
코드 포인트 (U+XXXX)
U+D55C U+AE00 U+0020 U+0041 U+0020 U+1F600
JavaScript·JSON (\uXXXX)
\uD55C\uAE00 A \uD83D\uDE00
ES6 (\u{...})
\u{D55C}\u{AE00} A \u{1F600}
HTML 16진수 (&#x...;)
한글 A 😀
HTML 10진수 (&#...;)
한글 A 😀
UTF-8 바이트 (hex)
ED 95 9C EA B8 80 20 41 20 F0 9F 98 80
UTF-16BE 바이트 (hex)
D5 5C AE 00 00 20 00 41 00 20 D8 3D DE 00
인코딩별 바이트 수
- UTF-8
- 13바이트
- UTF-16
- 14바이트
- EUC-KR (CP949)
- 7바이트
- EUC-KR로 표현 불가 1자 (바이트 수에서 제외)
한글 완성형 2,350자는 KS X 1001(EUC-KR)에 있고, 나머지 현대 한글 8,822자는 CP949(UHC) 확장 영역에 있어서 모두 2바이트예요. UTF-8은 한글 한 글자가 3바이트, 이모지는 4바이트예요.
글자별 코드표
| 글자 | 코드 포인트 | UTF-8 | UTF-16 | 10진수 | 보이는 글자 |
|---|---|---|---|---|---|
| 한 | U+D55C | ED 95 9C | D55C | 54620 | 1 |
| 글 | U+AE00 | EA B8 80 | AE00 | 44544 | 2 |
| (보이지 않음) | U+0020 | 20 | 0020 | 32 | 3 |
| A | U+0041 | 41 | 0041 | 65 | 4 |
| (보이지 않음) | U+0020 | 20 | 0020 | 32 | 5 |
| 😀 | U+1F600 | F0 9F 98 80 | D83D DE00 | 128512 | 6 |
소개
유니코드 변환기는 글자를 컴퓨터가 쓰는 여러 가지 코드 표기로 바꾸고, 반대로 코드를 다시 글자로 되돌리는 도구예요. 글자를 입력하면 U+D55C 같은 코드 포인트 목록, JavaScript·JSON에서 쓰는 \uD55C 이스케이프, ES6의 \u{D55C}, HTML 문자 참조 한와 한, UTF-8과 UTF-16BE 바이트를 한꺼번에 보여 주고 각각 복사할 수 있어요. 소스 코드에 한글을 안전하게 넣어야 할 때, 로그에 찍힌 \uXXXX를 읽어야 할 때, 글자가 깨지는 원인을 찾을 때 쓰기 좋아요.
같은 글자라도 인코딩마다 차지하는 바이트가 달라요. 그래서 UTF-8, UTF-16, EUC-KR(CP949) 바이트 수를 나란히 비교해 주고, 글자마다 코드 포인트와 바이트를 표로 보여 줘요. 화면에 보이는 글자 수, 코드 포인트 수, UTF-16 길이가 서로 다를 때는 그 이유도 알려 줘요. 모든 처리는 브라우저 안에서만 이루어지고 아무것도 저장하지 않아요.
사용법
- 변환 방향에서 텍스트 → 코드 또는 코드 → 텍스트를 골라요.
- 텍스트 → 코드에서는 변환할 텍스트 칸에 글자를 적어요. 처음에는 예시 ’한글 A 😀’가 들어 있어서 결과가 바로 보여요.
- ’ASCII는 그대로’가 켜져 있으면 영문, 숫자, 기호는 이스케이프하지 않고 그대로 둬요. 모든 글자를 코드로 바꾸려면 꺼요.
- 원하는 형식 옆의 복사 버튼을 눌러 결과를 옮겨요. 아래에서 인코딩별 바이트 수와 글자별 코드표를 확인할 수 있어요.
- 코드 → 텍스트에서는 입력 형식을 골라요. 자동 인식은
\uXXXX,\u{...}, U+XXXX,&#x...;,&#...;를 섞어 써도 찾아서 바꿔요. 16진수 바이트 목록이라면 UTF-8 바이트(hex)나 UTF-16BE 바이트(hex)를 골라요. - 변환된 텍스트 옆의 복사 버튼으로 결과를 복사해요.
기준
- 코드 포인트: 글자마다 U+ 뒤에 16진수 대문자로 적고, 4자리보다 짧으면 앞에 0을 채워요(A는 U+0041). 공백으로 구분해요.
- JavaScript·JSON: UTF-16 코드 단위마다
\uXXXX하나를 써요. U+10000 이상의 글자는 서로게이트 쌍 두 개가 돼요. ES6 형식은 코드 포인트마다\u{...}하나예요. - HTML: 코드 포인트마다
진수;또는
진수;를 써요. - ASCII는 그대로: 켜져 있으면 U+0020~U+007E의 출력 가능한 ASCII는 그대로 두되, 되돌릴 때 헷갈리지 않도록 JavaScript 형식에서는 역슬래시를, HTML 형식에서는 & < > “ ’를 코드로 바꿔요. 줄바꿈과 탭은 항상 코드로 바꿔요.
- UTF-8: 브라우저의 TextEncoder로 바이트를 구해요. 한글 한 글자는 3바이트, 이모지는 4바이트예요.
- UTF-16: 코드 단위마다 2바이트를 큰 자리부터(빅 엔디언) 적어요.
- EUC-KR(CP949): 브라우저의 EUC-KR 디코더로 2바이트 조합(첫 바이트 0x81
0xFE, 둘째 바이트 0x410xFE)을 모두 풀어 거꾸로 찾는 표를 만들어요. ASCII는 1바이트예요. 한글 완성형 2,350자는 KS X 1001에 있고, 나머지 현대 한글 8,822자는 CP949(UHC) 확장 영역에 있어서 ’가’부터 ’힣’까지 11,172자 모두 2바이트예요. 디코더가 KS X 1001만 아는 환경에서는 CP949 확장 영역의 배치 규칙대로 나머지 음절을 채워요. - 글자 수: 보이는 글자는 브라우저의 Intl.Segmenter가 나눈 그래핌(유니코드 표준 부속서 29) 기준이에요. 코드표는 코드 포인트마다 한 줄이고, 여러 코드 포인트가 한 글자를 이루면 몇 번째 글자의 몇 개 묶음인지 표시해요. 표는 처음 200개 코드 포인트까지만 보여 줘요.
- 코드 → 텍스트: U+ 값은 16진수 4~8자리를 읽고, U+ 값 사이의 공백·쉼표는 구분자로 지워요. U+10FFFF보다 큰 값이나 짝이 없는 서로게이트는 몇 번째 글자에서 문제가 생겼는지 알려 줘요. 바이트 입력은 공백, 쉼표, 콜론, 하이픈과 0x, \x, % 접두어를 무시하고, UTF-8 규칙에 맞지 않으면 몇 번째 바이트인지 알려 줘요.
- 입력은 20,000자까지 변환할 수 있어요.
예시
| 글자 | 코드 포인트 | JavaScript | UTF-8 바이트 | UTF-8 / UTF-16 / EUC-KR |
|---|---|---|---|---|
| A | U+0041 | A (ASCII 그대로를 끄면 \u0041) |
41 | 1 / 2 / 1바이트 |
| 한 | U+D55C | \uD55C |
ED 95 9C | 3 / 2 / 2바이트 |
| 똠 | U+B620 | \uB620 |
EB 98 A0 | 3 / 2 / 2바이트 (CP949 확장, 8C 63) |
| 中 | U+4E2D | \u4E2D |
E4 B8 AD | 3 / 2 / 2바이트 |
| é | U+00E9 | \u00E9 |
C3 A9 | 2 / 2 / 표현 불가 |
| 😀 | U+1F600 | \uD83D\uDE00 |
F0 9F 98 80 | 4 / 4 / 표현 불가 |
예시 문장 ’한글 A 😀’는 보이는 글자 6개, 코드 포인트 6개, UTF-16 길이 7이고 UTF-8 13바이트, UTF-16 14바이트, EUC-KR 7바이트(이모지 1자는 표현 불가)예요. 가족 이모지는 👨, 👩, 👧 사이에 결합 문자 ZWJ(U+200D)가 두 개 들어가서 보이는 글자는 1개지만 코드 포인트는 5개, UTF-16 길이는 8, UTF-8은 18바이트예요. 자모가 분리된 ’한글’은 U+1112 U+1161 U+11AB U+1100 U+1173 U+11AF로 코드 포인트 6개가 나와요.
거꾸로 자동 인식에 \uD55C\uAE00 😀 U+0041을 넣으면 ’한글 😀 A’가 되고, UTF-8 바이트(hex)에 ED 95 9C EA B8 80을 넣으면 ’한글’이 돼요.
참고할 점
주소창에 쓰는 %ED%95%9C 같은 퍼센트 인코딩이 필요하면 URL 인코더·디코더를, &처럼 이름이 있는 HTML 엔티티까지 다루려면 HTML 엔티티 변환기를 함께 쓰세요. 눈에 보이지 않는 공백이나 ZWJ 같은 문자를 찾아 지우고 싶다면 빈 글자(투명 문자) 복사 도구가 더 알맞아요.
자주 묻는 질문
코드 포인트와 인코딩은 무엇이 다른가요?
코드 포인트는 유니코드가 글자마다 붙인 번호예요. '한'은 U+D55C예요. 인코딩은 그 번호를 파일이나 네트워크에 저장할 때 바이트로 바꾸는 방법이라서, 같은 '한'이 UTF-8에서는 ED 95 9C 세 바이트, UTF-16에서는 D5 5C 두 바이트, EUC-KR에서는 C7 D1 두 바이트가 돼요.
이모지는 왜 \uXXXX가 두 개로 나오나요?
JavaScript와 JSON 문자열은 UTF-16 단위로 글자를 다뤄요. U+FFFF보다 큰 글자는 UTF-16에서 서로게이트 쌍이라는 두 단위로 나뉘기 때문에 😀(U+1F600)는 \uD83D\uDE00이 돼요. ES6 형식인 \u{1F600}은 코드 포인트를 그대로 적는 방식이라 하나로 끝나요.
같은 한글인데 코드 포인트 수가 더 많이 나와요.
맥의 파일 이름이나 일부 문서에서 복사한 한글은 자모가 분리된 형태(NFD)로 저장되어 있을 수 있어요. 이때 '한'은 초성 ㅎ, 중성 ㅏ, 종성 ㄴ에 해당하는 U+1112, U+1161, U+11AB 세 코드 포인트로 이루어져서 '한글' 두 글자가 코드 포인트 6개, UTF-8 18바이트로 나와요. 화면에는 똑같이 보여도 검색이나 비교가 어긋나는 원인이 돼요.
EUC-KR로 표현 불가는 무슨 뜻인가요?
EUC-KR(CP949)은 한글, 한자, 일부 기호만 담은 옛 한국어 인코딩이라 이모지나 é 같은 글자가 없어요. 그런 글자는 바이트 수에 넣지 않고 따로 개수만 보여 줘요. 브라우저가 EUC-KR 디코더를 지원하지 않으면 이 항목은 나타나지 않아요.
입력한 내용이 서버로 전송되나요?
아니요. 모든 변환은 브라우저 안에서 이루어지고 입력한 글이나 코드는 저장하거나 보내지 않아요.