ToolActToolAct

Unicode 인코딩 변환 도구

텍스트와 Unicode 인코딩 간 상호 변환, 다양한 형식 출력 지원

입력 내용
문자 수: 0
코드포인트 수: 0
변환 결과
문자 수: 0

문자 코드포인트 상세 (클릭하여 복사)

텍스트를 입력하면 각 문자의 코드포인트가 표시됩니다

Unicode란?

Unicode(통일 부호)는 컴퓨터 과학 분야의 산업 표준으로, 세계 대부분의 문자 체계를 정리하고 인코딩합니다. 각 Unicode 문자에는 고유한 숫자 번호가 부여되며, 이를 코드포인트(Code Point)라고 합니다. 일반적으로 16진수로 표시하고 U+ 접두사를 붙입니다. 예를 들어 U+4E2D는 한자 '中'을 나타냅니다. Unicode 인코딩 변환 도구는 텍스트를 다양한 Unicode 표기 형식으로 변환하거나, Unicode 코드를 텍스트로 복원할 수 있습니다.

사용 방법

단계

  1. 변환할 텍스트를 입력 상자에 입력하거나 붙여넣으세요
  2. 변환 방향을 선택하세요: Text to Unicode 또는 Unicode to Text
  3. 출력 형식을 선택하세요: \uXXXX 또는 U+XXXX (인코딩 시에만 사용 가능)
  4. 결과가 자동으로 표시되며, 원클릭 복사 또는 입력/출력 교환이 가능합니다

인코딩 참고

  • 유니코드 이스케이프 형식은 코드 및 디버깅에 유용하지만 일반 문구의 가독성을 떨어뜨릴 수 있습니다.
  • 디코딩 시 서로게이트 쌍과 이모지 출력을 확인하세요. 쌍을 분리하면 깨진 문자가 생성될 수 있습니다.

활용 사례

텍스트를 Unicode 이스케이프 형식으로 인코딩텍스트를 JavaScript 스타일의 \uXXXX 시퀀스나 U+XXXX 코드포인트 표기로 변환합니다. U+FFFF 이상의 문자는 이스케이프 모드에서 서로게이트 페어로 표시되지만, 상세 그리드에는 전체 코드포인트가 표시됩니다. 변환은 로컬의 String.prototype.codePointAt과 fromCodePoint 연산이므로, 이스케이프 출력을 직접 복사하기 전까지 문자 데이터는 로컬에만 머뭅니다.
Unicode 이스케이프를 다시 읽을 수 있는 텍스트로 디코딩\uXXXX, \u{...}, U+XXXX 패턴을 문자로 디코딩한 뒤 복원된 텍스트를 복사할 수 있습니다. 로그, JSON 문자열, 현지화 파일, 코드나 API에서 가져온 이스케이프 스니펫을 확인할 때 유용합니다. 디코딩은 페이지 내부의 fromCharCode와 fromCodePoint로 이루어지므로 원본 문자열과 재구성된 문자가 브라우저 탭을 벗어나지 않습니다. 내부 카피나 미출시 제품명이 포함된 스니펫을 분석할 때 안전합니다.
개별 코드포인트 확인입력 문자마다 보이는 문자와 U+ 값이 표시되며, 타일을 클릭하면 해당 코드포인트가 복사됩니다. 문자 수와 코드포인트 수가 별도로 표시되어 이모지 등 다중 단위 문자를 이해하는 데 중요합니다. 그리드는 메모리의 입력 문자열 반복으로 생성되므로, 타사 Unicode 조회 서비스에 텍스트를 전송하지 않고 전체 코드포인트 맵이 로컬에서 렌더링됩니다.
모지바케와 이중 인코딩 문자열 발견'é'나 '中文'처럼 보이는 문자열을 붙여넣고 디코딩한 뒤, 의심되는 원본 인코딩(UTF-8 대 Latin-1)으로 다시 인코딩하면 캡처 시점에서 이중 인코딩된 것인지 단순 깨짐인지 확인할 수 있습니다. 검사는 순수 브라우저 측에서 이루어집니다. TextDecoder, 코드포인트 반복, 재인코딩이 모두 페이지 안에서 일어나므로, 프로덕션 로그에서 가져온 문자열을 업로드하지 않고 분석할 수 있습니다.
이모지와 결합 기호를 코드포인트로 계수코드포인트 그리드로 가족 이모지, 국기 시퀀스, 여러 슬롯을 차지하는 결합 발음구별 기호를 표시합니다. 별도의 문자 수와 코드포인트 수가 '1자' 문자열이 UTF-16 단위를 7개나 소비할 수 있는 이유를 명확히 해줍니다. 계수가 로컬의 입력 문자열 반복이므로 민감한 콘텐츠가 포함된 문자열도 브라우저를 벗어나지 않고 데이터베이스 컬럼이나 전송 포맷 예산에 맞게 크기를 측정할 수 있습니다.

기술 원리

Unicode 표준(ISO/IEC 10646)은 17개 플레인(U+0000~U+10FFFF)에 걸쳐 모든 문자에 고유한 숫자 코드포인트를 부여합니다. 기본 다국어 플레인(BMP, 플레인 0)은 U+0000~U+FFFF를 포함하며, CJK 통합 한자를 포함한 거의 모든 현대 문자 체계를 다룹니다. 보충 플레인(1~16)은 역사적 문자, 희귀 CJK, 이모지, 특수 목적 문자를 포함합니다. 이 도구는 읽을 수 있는 텍스트와 두 가지 기계 지향 표현(JavaScript 스타일 \uXXXX 이스케이프 시퀀스와 표준 U+XXXX 표기법) 간의 변환을 수행합니다. UTF-16은 JavaScript 문자열의 내부 인코딩입니다. BMP 문자는 코드포인트와 동일한 단일 16비트 코드 유닛으로 저장되며, 보충 문자(U+10000 이상)는 서로게이트 쌍으로 인코딩됩니다: 코드포인트에서 0x10000을 빼서 20비트 값을 남기고, 이를 10비트 상위 서로게이트(0xD800 + ((cp - 0x10000) >> 10))와 10비트 하위 서로게이트(0xDC00 + ((cp - 0x10000) & 0x3FF))로 분할합니다. 도구의 인코드 모드는 String.prototype.codePointAt()으로 보충 코드포인트를 감지하고 \uXXXX 형식에 대해 올바른 두 \u 이스케이프를 생성합니다. U+XXXX 형식의 경우 전체 코드포인트가 직접 표시됩니다. 디코드 모드는 세 가지 구문을 파싱합니다: \uXXXX(4자리 16진수, BMP만), \u{XXXXX}(전체 Unicode 범위를 지원하는 ES6 중괄호 구문), U+XXXX(가변 길이 16진수의 표준 표기법). 정규식 /\\u\{([0-9a-fA-F]+)\}/g는 중괄호 이스케이프를 처리하여 String.fromCodePoint()에 전달하고, /\\u([0-9a-fA-F]{4})/g는 String.fromCharCode()를 통해 전통적 이스케이프를 처리합니다. 두 가지를 혼합하면 보충 문자가 두 \u 이스케이프로 인코딩된 경우 서로게이트 쌍을 올바르게 재구성합니다. UTF-8 인코딩은 바이트 길이를 결정하므로 관련이 있습니다: '中'(U+4E2D) 같은 BMP 문자는 3 UTF-8 바이트(E4 B8 AD)로 인코딩되고, '😀'(U+1F600) 같은 이모지는 4바이트(F0 9F 98 80)가 필요합니다. 도구의 문자 카운터는 코드포인트 수와 UTF-16 코드 유닛 수를 구분합니다. 이는 데이터베이스, API, 폼 필드에서 문자가 아닌 코드 유닛을 기준으로 길이 제한을 디버깅할 때 유용한 구분입니다.

  • 코드포인트 반복: String.prototype.codePointAt(pos)는 보충 문자에 대해 전체 코드포인트를 올바르게 반환하며, charCodeAt()는 상위 서로게이트만 반환 — 도구는 전개 연산자 [...str]를 사용하여 코드포인트 단위로 반복(내부적으로 문자열 이터레이터 프로토콜 호출)
  • 서로게이트 쌍 연산: 보충 코드포인트 CP > 0xFFFF에 대해 상위 서로게이트는 Math.floor((CP - 0x10000) / 0x400) + 0xD800, 하위 서로게이트는 ((CP - 0x10000) % 0x400) + 0xDC00 — 인코드 모드는 이 공식을 적용하여 유효한 \uD800\uDC00 쌍을 생성
  • 디코드 정규식 파이프라인: 세 패턴이 순차 실행 — \u{XXXXX}(ES6 중괄호) → \uXXXX(4자리 16진수) → U+XXXX(표준 표기법) — fromCodePoint()는 중괄호와 U+ 경로를, fromCharCode()는 전통적 4자리 경로를 처리
  • UTF-8 바이트 구조: BMP 문자는 1~3 UTF-8 바이트 사용(ASCII = 1바이트, Latin 보충 = 2바이트, CJK = 3바이트); 보충 문자는 4바이트 사용(11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 패턴) — 도구의 바이트 카운터는 new Blob([str]).size로 정확한 측정 수행
  • 코드포인트 vs 코드 유닛: 단일 가시 문자가 여러 코드포인트를 차지할 수 있음(예: é는 U+00E9 또는 U+0065 + U+0301 결합 악센트 가능) — 도구는 charCount(UTF-16 코드 유닛)와 codepointCount(Unicode 스칼라 값)를 모두 보고하여 이 불일치를 표면화
  • Unicode 플레인 개요: 플레인 0(BMP) = 현대 문자, 플레인 1(SMP) = 역사적 + 이모지 + 수학, 플레인 2(SIP) = 희귀 CJK, 플레인 14(SSP) = 태그 + 변형 선택자, 플레인 15~16 = 사적 사용 — 인코드 모드는 codePointAt()를 통해 모든 플레인을 올바르게 처리
  • \u vs U+ 표기법: \uXXXX는 JavaScript/Java/C 이스케이프 시퀀스(중괄호 없이는 BMP만); U+XXXX는 Unicode 컨소시엄의 정식 표기법(최소 4자리 16진수, 상한 없음) — 도구의 형식 전환은 이 두 표현 간에 전환

예시

한자(중국어)를 Unicode 이스케이프로 변환

입력:  你好世界 (CJK 4자, UTF-8 12바이트)
출력:  \u4f60\u597d\u4e16\u754c
참고:  BMP 코드 포인트만 해당; JSON 문자열, JavaScript 리터럴, 로그 파일에 유용

이모지를 서로게이트 페어로 이스케이프

입력:  😀🎉 (이모지 2개, 각각 U+FFFF 초과)
출력:  \uD83D\uDE00\uD83C\uDF89
참고:  비-BMP 문자는 UTF-16 서로게이트 페어로 인코딩되며, 구형 JS 엔진에서는 왕복 변환에 String.fromCodePoint가 필요

Unicode 이스케이프 디코딩

입력:  \u4e2d\u6587\u6d4b\u8bd5
출력:  中文测试
참고:  이스케이프된 문자열을 붙여넣으면 도구가 인코딩을 역으로 풀어줍니다. CJK 페이로드 문제를 디버깅할 때는 출력 바이트가 원본과 일치하는지 확인하세요

자주 묻는 질문

이 도구는 각 문자에 대해 무엇을 보여주나요?

코드 포인트(10진수와 16진수), 블록 이름(예: Basic Latin, CJK Unified Ideographs), 카테고리(Letter, Number, Symbol, Punctuation 등), Unicode 이름, 그리고 UTF-8 / UTF-16 / UTF-32 바이트 표현을 보여줍니다. 인코딩 버그 디버깅과 적절한 문자 선택에 유용합니다.

UTF-8, UTF-16, UTF-32의 차이는?

셋 다 동일한 Unicode 문자를 인코딩합니다. UTF-8은 코드 포인트당 1~4바이트를 사용하며 ASCII와 바이트 호환됩니다(웹의 지배적 인코딩). UTF-16은 2바이트나 4바이트를 사용합니다(JavaScript와 Windows 내부에서 사용). UTF-32는 항상 4바이트를 사용합니다(전송에서는 거의 보이지 않고, 메모리에서 흔합니다).

왜 '𝓗'가 두 개의 UTF-16 코드 단위로 표시되나요?

U+FFFF(Basic Multilingual Plane) 위의 코드 포인트는 UTF-16에서 '서로게이트 쌍'으로 인코딩됩니다: 두 개의 16비트 절반으로 표현됩니다. JavaScript의 string.length는 이를 2로 카운트하고, Array.from(str)은 하나로 처리합니다. 페이지는 두 시각을 모두 보여주므로 길이 카운트의 의외성을 디버그할 수 있습니다.

정규화 형식(NFC/NFD/NFKC/NFKD)이란 무엇인가요?

Unicode는 동일하게 보이는 텍스트의 여러 표현을 허용합니다 — é는 단일 코드 포인트(U+00E9)일 수도, e + 결합 어큐트 액센트(U+0065 U+0301)일 수도 있습니다. NFC는 합성하고, NFD는 분해합니다. NFKC/NFKD는 추가로 호환성 문자를 접습니다(½ → 1/2). 문자열 비교나 해싱 전에 항상 정규화하세요.

왜 이모지가 가끔 네모로 표시되나요?

브라우저의 폰트에 해당 글리프가 없기 때문입니다. 최신 이모지는 ZWJ 시퀀스(예: 👨‍👩‍👧 = 남자 + ZWJ + 여자 + ZWJ + 여자아이)를 사용하며, 단일 이미지로 렌더링하려면 특정 폰트가 필요합니다. 오래된 폰트는 이를 세 개의 별개 이모지나 네모로 표시합니다.

이름으로 문자를 어떻게 찾나요?

검색 상자에 이름(또는 일부)을 입력하세요. 이름은 공식 Unicode 이름 목록(LATIN SMALL LETTER A, GREEK CAPITAL LETTER OMEGA, MUSICAL SYMBOL G CLEF)을 따릅니다. 일반적인 이모지는 페이지가 인식하는 'CLDR short name'도 가지고 있습니다.

입력 내용이 업로드되나요?

아니요. 조회는 브라우저 내 Unicode 데이터베이스를 사용합니다. 어떤 데이터도 업로드되지 않습니다.