유니코드 이스케이프란 — \u 표기 이해하기
소스 코드나 JSON 파일을 열었더니 한글이 가 처럼, 이모지가 😀 처럼 적혀 있어 당황한 적 있으신가요? 글자가 깨진 게 아니라 유니코드 이스케이프라는 정상적인 표기입니다. 코드포인트가 무엇인지부터, \u 표기를 읽는 법과 글자 깨짐과의 차이까지 정리했습니다.
코드포인트(U+)란
유니코드는 세상의 모든 글자에 고유한 번호를 매긴 표준입니다. 그 번호 하나하나를 코드포인트라 부르고, 보통 16진수 앞에 U+를 붙여 적습니다. 예를 들어 'A'는 U+0041, 한글 '가'는 U+AC00, 웃는 이모지는 U+1F600 입니다. 이스케이프 표기는 결국 이 코드포인트를 코드 안에 풀어 쓴 것뿐입니다.
| 글자 | 코드포인트 | 설명 |
|---|---|---|
| A | U+0041 | ASCII 영문 대문자 |
| 가 | U+AC00 | 한글 음절의 시작 |
| 힣 | U+D7A3 | 한글 음절의 끝 |
| 😀 | U+1F600 | U+FFFF를 넘는 보충 문자 |
언어별 \u 이스케이프 표기
같은 코드포인트라도 언어마다 적는 방식이 조금씩 다릅니다. 핵심은 4자리(U+FFFF 이하)인지, 그 이상인지입니다.
| 환경 | 표기 | 예시('가' / 😀) |
|---|---|---|
| 자바스크립트(기본) | \uXXXX | 가 / 서로게이트 😀 |
| 자바스크립트(ES6) | \u{...} | \u{AC00} / \u{1F600} |
| 파이썬 | \uXXXX · \UXXXXXXXX | 가 / \U0001F600 |
| JSON | \uXXXX | 가 / 😀 |
왜 \u 로 바꿔 쓸까
- ASCII만 안전한 환경: 옛 설정 파일이나 일부 프로토콜은 영문·숫자 범위만 확실히 다룹니다. \u로 적으면 어떤 시스템을 거쳐도 깨지지 않습니다.
- 소스 안전성: 인코딩이 섞여 저장될 위험이 있는 코드에서, 글자 대신 코드포인트로 적어 두면 의도한 문자가 그대로 보존됩니다.
- 보이지 않는 문자: 제로폭 공백(U+200B)이나 줄바꿈처럼 눈에 안 보이는 문자를 식으로 명시해 드러낼 수 있습니다.
반대로 사람이 읽을 화면 문구는 보통 원래 글자 그대로 두는 편이 읽기 좋습니다. 변환이 필요할 때는 유니코드 이스케이프 변환기로 문자와 \u 표기를 양방향으로 바꿀 수 있습니다.
깨짐과는 무엇이 다른가
가장 헷갈리는 부분입니다. \u 표기는 되돌릴 수 있는 정상 표기입니다 — 프로그램이 읽으면 다시 원래 글자로 해석됩니다. 반면 글자 깨짐은 인코딩을 잘못 해석해 ??, □, 의미 없는 기호가 나오고 원래 글자로 복구할 수 없는 손상 상태입니다. 코드 안의 가은 '가'로 살아 있지만, 깨진 텍스트의 □는 정보가 이미 사라진 경우가 많습니다.
아닙니다. 깨짐이 아니라 '가'라는 글자를 코드포인트(U+AC00)로 안전하게 적은 정상 표기입니다. 프로그램이 이 표기를 읽으면 다시 '가'로 해석합니다. 반대로 글자 깨짐은 ?? 나 □, 의미 없는 기호가 나오면서 원래 글자로 되돌릴 수 없는 상태라 둘은 전혀 다릅니다.
\uXXXX는 16진수 4자리로 U+FFFF 이하 문자를 나타내는 기본 형식입니다. 이모지처럼 U+FFFF를 넘는 문자는 자바스크립트에서 \u{1F600} 처럼 중괄호를 쓰거나, 파이썬에서는 8자리인 \U0001F600 형식을 씁니다. 중괄호나 대문자 U가 없으면 4자리만 인식하므로 큰 코드포인트는 깨질 수 있습니다.
ASCII만 안전하게 다루는 환경이나, 인코딩이 섞여 깨질 위험이 있는 곳에서 어떤 시스템을 거쳐도 글자가 보존되도록 하기 위해서입니다. 또 줄바꿈이나 제로폭 공백처럼 눈에 보이지 않는 문자를 명시적으로 드러내려고도 씁니다. 사람이 읽을 화면에서는 보통 원래 글자 그대로 두는 편이 좋습니다.