문자열 이스케이프 변환기

JSON, JavaScript, Java, C, Python, HTML, XML, CSV, SQL, 정규식, 셸 문자열 이스케이프·언이스케이프. 언어별 실제 동작으로 검증하고 오류 위치를 알려 줍니다.

  • 브라우저에서 처리
  • 데이터가 브라우저 밖으로 나가지 않습니다
  • 무료 · 회원가입 불필요
어느 언어의 문자열 규칙으로 처리할지 정합니다. 보이는 옵션은 형식과 방향에 따라 달라집니다. JavaScript와 Python은 따옴표와 비 ASCII 처리, JSON은 \uXXXX 출력, Java와 C는 비 ASCII 처리, HTML은 문자 참조, XML은 속성 값, CSV는 구분자·따옴표·수식 방지, SQL은 방언입니다. 정규식과 셸에는 옵션이 없고, 대부분의 옵션은 이스케이프 방향에서만 나옵니다. 형식을 바꿔도 입력은 그대로 두고 다시 변환합니다. 형식, 방향, 옵션은 이 기기에 저장하고, 입력한 텍스트는 저장하지 않습니다.
"이스케이프"는 텍스트를 고른 형식의 문자열 리터럴 안쪽으로 바꿉니다. "언이스케이프"는 그런 리터럴을 텍스트로 되돌립니다. 방향을 바꿔도 입력 칸의 내용은 그대로 두고 다시 변환합니다. "맞바꾸기"는 결과를 입력 칸으로 옮긴 뒤 방향을 바꿉니다.
끄면 출력이 JSON.stringify와 같고 비 ASCII 문자는 그대로 둡니다. 켜면 U+007E 뒤의 문자를 모두 \uXXXX로 쓰고, U+FFFF를 넘는 문자는 서로게이트 쌍으로 씁니다. Python json.dumps의 기본 출력과 같습니다. "\uXXXX"는 비 ASCII 문자를 모두 \uXXXX로 쓰고, U+FFFF를 넘는 문자는 서로게이트 쌍으로 씁니다. "\u{…}"는 U+FFFF를 넘는 문자를 \u{…} 하나로 씁니다. "그대로"는 보이는 문자를 그대로 두지만 제로 너비 공백, 바이트 순서 표시, U+0020 이외의 공백 같은 보이지 않는 문자는 이스케이프합니다. U+2028과 U+2029는 어느 설정에서나 이스케이프합니다. "UTF-8 바이트"는 비 ASCII 문자를 UTF-8 바이트로 쓰고, 바이트 하나를 세 자리 8진수 이스케이프로 씁니다. "\u / \U"는 유니버설 문자 이름으로 씁니다. "그대로"는 보이는 문자를 그대로 두고, 보이지 않는 문자는 유니버설 문자 이름으로 씁니다. 어느 설정에서나 U+0080~U+009F는 바이트로 쓰고, ??의 두 번째 ?는 \?로 써서 삼중자가 되지 않게 합니다. 값이 = + - @(전각 포함), 탭, 줄 바꿈으로 시작할 때 적용됩니다. "끄기"는 값을 바꾸지 않고 상태 줄에 경고만 표시합니다. "' 붙이기"는 값 앞에 아포스트로피를 붙이고 필드를 따옴표로 감쌉니다. "탭 붙이기 (Excel)"는 따옴표 안에서 값 앞에 탭을 붙이며, 이 탭은 데이터에 남습니다. "표준"은 작은따옴표를 두 개로 쓰고 백슬래시는 그대로 둡니다. 텍스트에 백슬래시나 U+0000이 있으면 상태 줄에서 알려 줍니다. "MySQL / MariaDB"는 작은따옴표, 큰따옴표, 백슬래시, NUL, 줄 바꿈, 캐리지 리턴, Ctrl+Z를 백슬래시 이스케이프로 씁니다. 언이스케이프도 같은 방언으로 읽으며, 앞뒤 작은따옴표는 있어도 되고 없어도 됩니다.

입력하는 대로 결과가 바뀝니다. "예시"는 현재 형식의 샘플을 넣습니다. 언이스케이프에서는 리터럴의 앞뒤 따옴표가 있어도 되고 없어도 됩니다. 입력 전체가 따옴표로 감싼 리터럴 하나이면 따옴표를 떼고 상태 줄에 알립니다. JSON, Java, C는 큰따옴표, JavaScript는 작은따옴표·큰따옴표·백틱, Python은 작은따옴표와 큰따옴표, SQL은 작은따옴표가 대상입니다. 백슬래시 대신 ¥나 ₩로 쓴 것은 이스케이프가 아니며, 상태 줄이 그 문자를 알려 줍니다.
이 칸은 읽기 전용입니다. "복사"는 내용을 복사하고, "맞바꾸기"는 내용을 입력 칸으로 옮기고 방향을 바꿉니다. 입력이 고른 형식에 맞지 않으면 이 칸은 비워지고 상태 줄이 원인과 위치를 알려 줍니다. 위치와 글자 수는 Unicode 코드 포인트로 세므로 😀는 1자입니다. 입력에 줄 바꿈이 있으면 행과 열로 알려 줍니다.
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.

₩와 백슬래시

한국어 Windows의 코드 페이지 949에서는 0x5C 자리가 원화 기호이고, 시스템 글꼴을 포함한 여러 글꼴이 지금도 백슬래시를 ₩로 그립니다. 그래서 경로는 C:₩Program Files₩, 줄 바꿈 이스케이프는 ₩n처럼 보입니다(Won sign, Wikipedia; Michael Kaplan의 글 When is a backslash not a backslash?). 화면에 보이는 대로 다시 입력하면 진짜 원화 기호 ₩(U+20A9)가 들어갈 수 있습니다.

이 텍스트를 Java → 언이스케이프에 넣어도 ₩n은 줄 바꿈이 되지 않습니다. U+20A9는 이스케이프 문자가 아니기 때문입니다. 도구는 텍스트를 바꾸지 않고, “₩n은 백슬래시가 아니라 ₩(U+20A9)로 시작한다”고 알려 줍니다. 전각 ₩(U+FFE6)와 \(U+FF3C)도 같은 방식으로 찾아냅니다.

한글이 \uXXXX로 보일 때

Python의 json.dumps는 기본값이 ensure_ascii=True라서 json.dumps({"name": "홍길동"})의 결과가 {"name": "\ud64d\uae38\ub3d9"}입니다(json 모듈 문서). 로그에서 이 값이 다시 문자열로 감싸져 따옴표까지 이스케이프되어 있다면 JSON → 언이스케이프를 씁니다.

입력: {\"name\":\"\ud64d\uae38\ub3d9\"}
출력: {"name":"홍길동"}

반대로 ‘비 ASCII 문자를 \uXXXX로’를 켜고 이스케이프하면 안녕 → \uc548\ub155처럼 json.dumps 기본 출력과 같은 형태가 됩니다. 이 옵션을 끄면 브라우저의 JSON.stringify와 똑같이 한글을 그대로 둡니다. 두 경우 모두 테스트 스크립트가 Python과 브라우저의 결과를 하나하나 비교합니다.

셸 인수와 한글 파일명

작은따옴표가 들어간 파일명을 셸 명령에 넣을 때는 셸 → 이스케이프가 Python shlex.quote와 같은 결과를 냅니다.

입력출력
홍길동's report.pdf'홍길동'"'"'s report.pdf'
report_2026.pdfreport_2026.pdf(따옴표가 필요 없음)

거꾸로 $HOME/notes.txt를 언이스케이프하면 오류가 납니다. $HOME은 셸이 실행 환경에 따라 바꾸는 값이라 하나의 결과로 정할 수 없기 때문입니다. bash의 printf %q가 내놓는 hello\ world\!나 $'a\nb' 같은 형태는 그대로 풀어 줍니다.

형식별 규칙과 검증

형식규칙검증 방법
JSONRFC 8259 7절JSON.stringify / JSON.parse, Python json.dumps
JavaScriptECMAScript 문자열 리터럴(strict 모드)"", '', 템플릿 리터럴로 평가
JavaJLS 3.3, 3.10.7절javac 21로 컴파일해 출력
C / C++C11 6.4.4.4절cc -std=c11로 컴파일해 바이트 출력
Python언어 레퍼런스의 이스케이프 시퀀스repr(), ascii(), ast.literal_eval
HTML / XMLWHATWG 문자 참조 / XML 1.0entities 디코더, Python ElementTree
CSV / SQLRFC 4180 / 따옴표 두 번 쓰기Python csv, sqlite3
정규식 / 셸ECMAScript 구문 문자 / POSIX 따옴표 규칙RegExp(플래그 없음, u, v)와 Python re, shlex.quote와 /bin/sh

검증 스크립트는 저장소의 scripts/test-string-escape.mjs입니다. 자주 틀리는 부분도 여기서 확인합니다. JavaScript에서 NUL 뒤에 숫자가 오면 \x00으로 써야 하고(\0 다음에 1이 오면 예전 8진수 \01이 되어 strict 모드에서 SyntaxError), Java에서 줄 바꿈은 \u000a가 아니라 \n으로 써야 하며, HTML에서 😀는 참조 하나 😀로 써야 합니다.

오류와 안내

입력형식표시
O'ReillySQL' 하나에서 SQL 문자열이 끝나 버립니다. ''로 쓰세요
a.b정규식.는 정규식 연산자이지 문자 자체가 아닙니다
C:₩new₩dataJava오류는 아니지만 ₩(U+20A9)가 백슬래시가 아니라고 안내

SQL 형식에서는 “이스케이프로는 SQL 인젝션을 확실히 막을 수 없다”는 OWASP의 안내를 항상 함께 보여 줍니다(OWASP SQL Injection Prevention Cheat Sheet). CSV 값이 =, +, -, @로 시작하면 스프레드시트가 수식으로 실행할 수 있다고 알리고(OWASP CSV Injection), ‘수식 방지’에서 OWASP가 제시한 두 방법(' 붙이기, 탭 붙이기) 중 하나를 고를 수 있습니다.

다른 도구와 비교

2026-10-01 데스크톱 Chromium에서 Bing의 ‘이스케이프 변환’ 상위 도구를 같은 입력으로 시험했습니다.

  • devlab.itlibra.com: ‘HTML entities (all non-ASCII)‘로 😀를 ��처럼 UTF-16 반쪽 참조 두 개로 바꿉니다. 브라우저는 이를 대체 문자 두 개로 표시합니다. JavaScript 언이스케이프에서 \x4는 오류 없이 그대로 남습니다.
  • codertools.net(한국어 페이지 제공): JavaScript 이스케이프에서 NUL 뒤에 1이 오면 a\01을 냅니다. \u{1F600}과 JSON의 \q는 아무 안내 없이 그대로 돌려줍니다.

이 도구는 같은 입력에 대해 😀, \x001, 위치가 붙은 오류를 돌려주며, 텍스트를 외부로 보내지 않습니다.

관련 도구

이스케이프하기 전에 보이지 않는 문자가 섞였는지 확인하려면 보이지 않는 문자 감지기, 퍼센트 인코딩은 URL 인코드 / 디코드, 엔티티 목록은 HTML 엔티티 인코더 / 디코더, 이스케이프한 패턴 확인은 정규식 테스터를 쓰세요.

제한 사항

  • 입력은 하나의 문자열 값으로 다룹니다. CSV 언이스케이프는 필드 하나, 셸 언이스케이프는 인수 하나만 읽습니다.
  • Python의 \N{이름}은 Unicode 문자 이름표가 필요해 지원하지 않습니다(오류로 \u / \U를 안내).
  • HTML 이스케이프는 본문과 따옴표로 감싼 속성 값용입니다. <script> 안의 JavaScript, CSS, URL은 각각 다른 규칙이 필요합니다.
  • 정규식 이스케이프는 문자 클래스 [...] 밖에서 쓰는 것을 전제로 합니다.
  • XML 1.0에서 쓸 수 없는 문자(대부분의 C0 제어 문자, U+FFFE, U+FFFF, 짝 없는 서로게이트)는 이스케이프할 수 없어 오류로 알립니다.

FAQ

\ud64d\uae38\ub3d9 같은 문자열을 한글로 되돌리려면?

형식을 JSON으로 두고 언이스케이프를 고른 뒤 붙여 넣으면 됩니다. Python의 json.dumps는 기본값 ensure_ascii=True 때문에 한글을 이런 \uXXXX 형태로 씁니다. 반대로 '비 ASCII 문자를 \uXXXX로'를 켜면 json.dumps 기본 출력과 같은 결과가 나옵니다.

₩n이 줄 바꿈으로 바뀌지 않아요

한국어 Windows의 여러 글꼴은 백슬래시(U+005C)를 ₩로 그립니다. 화면을 보고 다시 입력하면 진짜 원화 기호 U+20A9나 전각 ₩(U+FFE6)가 들어가는데, 이 문자들은 이스케이프 문자가 아닙니다. 도구는 텍스트를 그대로 두고 어떤 문자가 원인인지 알려 줍니다.

언이스케이프하면 '이스케이프하지 않은 "에서 문자열이 끝나 버립니다'라고 나옵니다

언이스케이프에는 문자열 리터럴의 안쪽을 넣어야 하고, 거기서는 "가 모두 \"로 쓰여 있어야 합니다. 이미 원래대로 돌아간 JSON({"a":1} 등)을 넣으면 첫 따옴표가 지적됩니다. 입력 전체가 따옴표로 감싼 리터럴("a\nb" 등)이면 앞뒤 따옴표를 자동으로 떼고 알려 줍니다.

SQL 형식으로 이스케이프하면 SQL 인젝션을 막을 수 있나요?

아닙니다. '를 ''로 쓰면 올바른 문자열 리터럴은 되지만, OWASP는 이스케이프를 '강력히 권장하지 않는' 방법으로 분류합니다. 데이터베이스, 설정, 문자 집합에 따라 결과가 달라지기 때문입니다. 애플리케이션 코드에서는 파라미터화 쿼리(PreparedStatement 등)를 쓰세요.

입력한 텍스트가 서버로 전송되나요?

아니요. 11가지 형식 모두 브라우저 안에서 계산합니다. HTML 문자 참조는 브라우저 자체 파서로 복원하지만, 그때 쓰는 문서는 스크립트를 실행하지 않고 이미지도 불러오지 않습니다. 이 기기에 저장하는 것은 고른 형식, 방향, 옵션뿐입니다.