본문 바로가기
Converter

유니코드 이스케이프 변환기 (\u · U+ · 이모지)

문자를 \uAC00·U+AC00·\u{1F600} 로, 이스케이프를 문자로

한글·이모지를 \u·\u{}·U+ 표기로 바꿉니다. ASCII 는 기본으로 그대로 둡니다

\uXXXXJS · Java · JSON · C#

\u{...}ES6 · Rust

U+XXXX유니코드 표기 (모든 문자)

같은 글자, 세 가지 표기

컴퓨터에서 모든 글자에는 코드포인트라는 고유 번호가 있습니다. ‘가’는 0xAC00(44032)입니다. 이 번호를 코드나 문서에 적는 방법이 여러 가지라, 같은 글자가 상황에 따라 다르게 보입니다.

가  →  U+AC00     유니코드 표준 표기 (문서·명세)
       \uAC00     JS·Java·JSON·C# 문자열 이스케이프
       \u{AC00}   ES6·Rust 코드포인트 이스케이프

셋은 가리키는 글자가 같을 뿐 쓰는 자리가 다릅니다. 위 변환기는 문자를 넣으면 이 세 표기를 한 번에 만들고, 반대로 어느 표기든(그리고 \xXX까지) 붙여넣으면 다시 글자로 되돌립니다. 문자의 10·16진 코드값 자체가 궁금하면 아스키코드 변환기, HTML의 엔티티(가)는 그 도구가 맡습니다 — 여기는 프로그래밍 언어의 이스케이프에 집중합니다.

이모지가 \u 두 개로 쪼개지는 이유: 서로게이트 쌍

여기가 로그·JSON을 디버깅할 때 가장 헷갈리는 지점입니다. \uXXXX 16비트(코드 유닛) 하나만 담습니다. 그런데 이모지는 그 16비트로 담기지 않는 큰 번호입니다.

😀 = U+1F600  (16비트를 넘는 코드포인트)

JavaScript 문자열에서는 두 조각(서로게이트 쌍)으로 나눠 적는다:
  \uD83D \uDE00
   └── 상위 ──┘ └── 하위 ──┘  =  😀 하나

\u{1F600} · U+1F600 은 코드포인트를 통째로 적어 하나로 표현

그래서 "😀".length가 2로 나오고, 로그에 이모지 하나가 😀 두 개로 보이는 것입니다. 이 도구는 JS 표기에서는 이 서로게이트 쌍을, ES6·U+ 표기에서는 코드포인트 하나를 정확히 구분해 보여 줍니다. 되돌릴 때도 😀처럼 두 조각이 인접해 있으면 자연히 한 이모지로 합칩니다.

실무에서 언제 쓰나

  • 깨진 로그 읽기 — 서버 로그·API 응답이 한글을 안녕처럼 이스케이프해 보낼 때, 붙여넣어 읽을 수 있는 글자로 되돌립니다.
  • 비ASCII를 코드에 넣기 — 오래된 시스템이나 properties·소스 파일이 ASCII만 안전할 때, 한글을 \u이스케이프로 바꿔 넣습니다(위 도구의 ‘ASCII 포함 전부’ 옵션).
  • 문자 정체 확인 — 눈에 안 보이는 문자나 비슷하게 생긴 문자(전각·유사 기호)가 섞였을 때, U+ 코드포인트로 정확히 무엇인지 확인합니다.

디코딩은 아는 형식만 되돌리고 나머지 텍스트는 그대로 둡니다. 따옴표·중괄호가 섞인 JSON을 통째로 붙여넣어도 이스케이프만 골라 풀고 구조는 보존하며, 범위를 벗어나는 값 (\u{999999} 같은)은 억지로 문자를 지어내지 않고 원문 그대로 둡니다.

자주 묻는 질문

\uAC00, U+AC00, \u{AC00}은 다 같은 건가요?
가리키는 글자('가')는 같지만 표기법과 쓰는 자리가 다릅니다. U+AC00은 유니코드 표준이 정한 이름 표기로 문서·명세에서 씁니다. \uAC00은 JavaScript·Java·JSON·C# 같은 언어의 문자열 안에서 쓰는 이스케이프이고, \u{AC00}은 ES6·Rust에서 쓰는 중괄호 표기입니다. 세 표기 모두 위 도구가 한 번에 만들어 주고, 반대로 어느 표기든 붙여넣으면 문자로 되돌립니다.
이모지를 \u로 바꾸면 왜 \uD83D\uDE00처럼 두 개가 되나요?
\uXXXX가 16비트(코드 유닛) 하나만 담을 수 있기 때문입니다. 😀(U+1F600) 같은 이모지는 16비트를 넘는 큰 코드포인트라, JavaScript 문자열에서는 이를 '서로게이트 쌍'이라는 두 개의 16비트 조각(\uD83D와 \uDE00)으로 나눠 적습니다. 그래서 이모지 하나가 \u 두 개로 보입니다. 반면 \u{1F600}이나 U+1F600은 코드포인트를 통째로 적어 하나로 표현합니다. 이 도구는 JS 표기에서는 서로게이트 쌍으로, ES6·U+ 표기에서는 하나로 정확히 나눠 보여 줍니다.
JSON 로그에 \uc548\ub155처럼 나온 걸 한글로 보고 싶어요.
그 문자열을 위 도구의 '이스케이프 → 문자' 방향에 붙여넣으면 됩니다. \uc548\ub155은 '안녕'의 \u 이스케이프입니다. 서버 로그나 API 응답이 한글을 이스케이프해서 보내는 경우가 많은데(특히 JSON.stringify의 기본 동작이 아니어도 라이브러리 설정에 따라), 이 도구가 \u·\u{}·U+·\x가 섞여 있어도 아는 형식만 골라 되돌리고 나머지 텍스트(따옴표·중괄호)는 그대로 둡니다.
\x41 같은 표기는 뭔가요?
\xXX는 16진수 두 자리로 한 바이트(0~255)를 나타내는 이스케이프입니다. \x41은 대문자 A(65)입니다. 다만 한 바이트라 0~255 범위, 즉 ASCII와 라틴-1까지만 표현할 수 있어 한글·이모지에는 쓰지 못합니다(그래서 이 도구는 문자를 \x로 '만들지는' 않고, 붙여넣은 \xXX를 '되돌리는' 것만 지원합니다). 문자 하나가 몇 번인지 10·16진 코드값으로 보고 싶다면 아스키코드 변환기가 더 적합합니다.
HTML의 가도 여기서 되나요?
그건 형제 도구인 HTML 엔티티 변환기의 몫입니다. 가·가·© 같은 표기는 HTML에서 쓰는 엔티티라, 역할을 나눠 그쪽에서 다룹니다. 이 도구는 프로그래밍 언어의 이스케이프(\u·\u{}·U+·\x)에 집중합니다. 겹치는 기능을 양쪽에 두지 않으려는 것이고, 필요하면 서로 링크로 오갈 수 있습니다.