유니코드 이스케이프 변환과 복원, 형식 총정리

한글이나 이모지를 \uXXXX 같은 코드로 바꾸는 일도, 반대로 그 코드를 다시 원래 문자로 되돌리는 일도 원리는 하나입니다. 문자를 '코드포인트'라는 정수 하나로 읽은 뒤, 그 정수를 어떤 표기법으로 적느냐의 차이일 뿐입니다.

이 글은 \uXXXX·\u{...}·U+코드포인트·HTML 10·16진 엔티티·이름 엔티티가 각각 무슨 뜻이고 서로 어떻게 다른지, 문자 하나가 각 형식에서 어떤 모습이 되는지를 한글·©··👍 예시로 정리합니다.

요약 ① 여섯 가지 형식은 모두 문자의 '코드포인트'(정수 하나)를 다르게 적은 것뿐이라, 가리키는 문자는 같고 표기만 다릅니다. ② U+FFFF를 넘는 이모지는 \u 형식에서만 서러게이트 쌍 두 조각(👍)으로 쪼개지고, 나머지 형식은 코드포인트를 그대로 적습니다. ③ 이름 엔티티(© 등)는 약 30개만 내장되어 있어, 이름이 없는 문자는 숫자 엔티티(★)로 대신 표시됩니다.

코드에서 한글이 안녕로 보일 때

JSON 파일이나 로그, 자바스크립트 소스에서 한글이 안녕처럼 낯선 코드로 찍혀 있는 걸 본 적이 있을 겁니다. 반대로 HTML에 저작권 기호를 넣어야 하는데 ©를 그대로 쓰기가 꺼려져 ©© 같은 표기를 찾는 경우도 있습니다.

이건 문자가 깨진 게 아니라, 같은 문자를 사람이 아니라 기계가 읽기 좋은 형태로 적어둔 것입니다. 한글 '안'은 화면에서는 '안'이지만 컴퓨터 안에서는 U+C548이라는 번호를 가진 문자이고, 은 그 번호를 자바스크립트 문법으로 적은 것뿐입니다.

문제는 이 표기법이 한 가지가 아니라는 점입니다. \uXXXX, \u{...}, U+, &#숫자;, &#x숫자;, &이름;이 모두 같은 문자를 가리키면서 생김새만 다릅니다. 그래서 "이게 무슨 뜻이고 어떻게 되돌리지?"에서 막히게 됩니다.

도구 없이 직접 변환하는 방법

모든 변환의 출발점은 문자의 코드포인트를 구하는 것입니다. 브라우저 개발자 콘솔에서 "©".codePointAt(0)을 실행하면 169가 나옵니다. 이 10진수를 16진수로 보려면 (169).toString(16)을 실행하면 "a9"가 나옵니다.

이제 이 두 숫자(10진 169, 16진 a9)만 있으면 여섯 형식을 손으로 적을 수 있습니다.

  • \uXXXX (JS): 16진수를 4자리로 채워 \u 뒤에 붙입니다 → ©
  • \u{...} (ES6): 16진수를 그대로 중괄호에 넣습니다 → \u{a9}
  • U+코드포인트: 16진수를 대문자 4자리로 적습니다 → U+00A9
  • &#DDD; (HTML 10진): 10진수를 그대로 넣습니다 → ©
  • &#xHH; (HTML 16진): 16진수를 넣습니다 → ©
  • &name; (이름 엔티티): 정해진 이름이 있으면 그 이름 → ©

같은 방법을 ©··👍에 적용하면 아래 표가 됩니다. 코드포인트만 알면 나머지는 표기 규칙을 따라 적는 기계적인 작업입니다.

형식© (U+00A9) (U+2605)👍 (U+1F44D)
\uXXXX (JS)©👍
\u{...} (ES6)\u{a9}\u{2605}\u{1f44d}
U+코드포인트U+00A9U+2605U+1F44D
&#DDD; (10진)©★👍
&#xHH; (16진)©★👍
&이름; (이름)©★👍

반대로 코드를 문자로 되돌리는 것도 같은 숫자만 있으면 됩니다. ©에서 a9를 꺼내 16진수로 읽으면 169이고, String.fromCodePoint(169)를 실행하면 다시 ©가 나옵니다. ©도 결국 10진수 169라서 결과는 같습니다.

여기까지가 도구 없이 하는 전체 과정입니다. 다만 문자가 여러 개이거나 형식이 섞여 있으면 한 글자씩 콘솔에 넣고 다시 조립하는 게 번거롭습니다. 그 반복 작업만 대신 해주는 것이 이 변환기입니다.

저희 도구로 확인하기.

유니코드 이스케이프 변환

설치·가입 없이 브라우저에서 바로 돌아가는 무료 변환기입니다. 문자 → 코드, 코드 → 문자 양방향을 모두 지원합니다.

자주 헷갈리는 지점

이모지가 두 조각으로 쪼개질 때

👍\uXXXX로 바꾸면 👍처럼 두 조각으로 나뉩니다. 오류가 아닙니다. \uXXXX는 16진수 네 자리(U+FFFF)까지만 담을 수 있어서, 그보다 큰 문자는 두 개를 짝지어 표현하도록 정해져 있습니다. 이 짝을 서러게이트 쌍이라고 합니다.

그래서 같은 이모지라도 \u{1f44d}, U+1F44D, 👍 형식에서는 한 덩어리로 나옵니다. 이 형식들은 코드포인트를 그대로 적기 때문입니다. 복원 탭에 넣으면 어느 형식이든 다시 하나의 👍로 돌아옵니다.

안 바뀌는 문자와 없는 이름 엔티티

영문·숫자·기본 기호가 그대로 남는 것도 정상입니다. 'ASCII 문자는 그대로 두기' 옵션이 기본으로 켜져 있어, 코드포인트 0x20~0x7E(공백부터 물결표까지)에 해당하는 문자는 바꾸지 않고 특수문자만 변환합니다. 이 체크를 끄면 AA처럼 전부 이스케이프됩니다.

16진수 표기의 대소문자가 형식마다 다르다는 점도 알아두면 덜 헷갈립니다. U+ 형식만 대문자(U+00A9)이고, \u·\u{...}·&#x는 소문자(©, ©)로 나옵니다. 가리키는 값은 같으므로 대소문자 차이로 다른 문자라고 오해할 필요는 없습니다.

모든 특수문자에 &이름;이 있는 것도 아닙니다. 자주 쓰는 약 30개만 내장되어 있어, ©©로 나오지만 처럼 이름이 없는 문자는 자동으로 ★ 같은 숫자 엔티티로 대체됩니다. 화면의 '입력 문자'와 '결과 길이' 숫자가 다른 것도 같은 이유인데, 👍는 입력으로는 한 글자지만 \uXXXX 결과로는 열두 글자가 됩니다.

정리

핵심만 추리면 이렇습니다.

  1. 여섯 형식은 모두 같은 코드포인트를 다르게 적은 것입니다. 뜻은 같고 껍데기만 다릅니다.
  2. 변환의 출발점은 코드포인트입니다. "문자".codePointAt(0)으로 정수를 구한 뒤 형식별 규칙대로 적으면 됩니다.
  3. \u는 네 자리(U+FFFF)까지만 담기므로, 그보다 큰 이모지는 서러게이트 쌍 두 조각으로 나뉩니다. 다른 형식은 코드포인트를 그대로 씁니다.
  4. 'ASCII 문자는 그대로 두기'가 기본이라 영문·숫자·기본 기호는 그대로 두고 특수문자만 바꿉니다.
  5. 이름 엔티티는 약 30개만 있어, 이름이 없으면 변환기가 자동으로 숫자 엔티티로 표시합니다.
유니코드 이스케이프 변환

설치·가입 없이 브라우저에서 바로 돌아가는 무료 변환기입니다. 문자 → 코드, 코드 → 문자 양방향을 모두 지원합니다.

자주 묻는 질문

이모지를 \u 형식으로 바꾸니 두 조각으로 나뉘어요. 오류인가요?

아닙니다. \uXXXX는 16진수 네 자리(U+FFFF)까지만 표현할 수 있어, 그보다 큰 문자는 두 개의 \u를 짝지은 서러게이트 쌍(👍)으로 나타냅니다. \u{1f44d}, U+1F44D, 👍 형식은 한 덩어리로 나오고, 복원 탭에 넣으면 어떤 형식이든 다시 하나의 👍로 돌아옵니다.

영문과 숫자는 왜 안 바뀌나요?

'ASCII 문자는 그대로 두기' 옵션이 기본으로 켜져 있기 때문입니다. 코드포인트 0x20~0x7E에 해당하는 문자(공백·영문·숫자·기본 기호)는 그대로 두고 특수문자만 바꿉니다. 이 옵션을 끄면 AA처럼 전부 이스케이프됩니다.

여러 형식이 섞인 코드도 한 번에 되돌릴 수 있나요?

됩니다. 복원 탭은 \u{...}, \uXXXX, \xXX, U+XXXX, &#xHH;, &#DDD;, 이름 엔티티를 각각 인식합니다. 예를 들어 안녕 © U+1F44D를 넣으면 안녕 © 👍로 한 번에 복원됩니다.

모든 특수문자에 &이름; 엔티티가 있나요?

아닙니다. 자주 쓰는 약 30개 이름만 내장되어 있습니다. ©©, €처럼 나오지만, 처럼 지정된 이름이 없는 문자는 ★ 같은 숫자 엔티티로 대체됩니다. 그래서 이름이 없는 문자는 변환기가 알아서 숫자 엔티티로 표시합니다.

가격 보기카톡 무료 상담