ToolDeck

String Escape

JavaScript, Python, JSON 문자열 이스케이프 및 언이스케이프

예시 시도

입력

출력

로컬에서 실행 · 시크릿 붙여넣기 안전
결과가 여기에 표시됩니다…
모드:

문자열 이스케이프란?

문자열 이스케이프는 문자열 리터럴 내에서 특별한 의미를 갖는 문자 앞에 백슬래시(또는 다른 마커)를 삽입하는 과정입니다. 프로그래밍 언어 파서가 큰따옴표로 묶인 문자열 안에서 큰따옴표를 만나면 문자열의 끝으로 처리합니다. 따옴표 앞에 백슬래시를 붙여 이스케이프하면 — " 대신 \" 로 표기하면 — 파서에게 이것이 구분자가 아닌 리터럴 문자임을 알립니다. 문자열 리터럴을 사용하는 모든 언어에는 이스케이프 규칙이 있지만, 정확한 시퀀스는 언어마다 다릅니다.

가장 일반적인 이스케이프 시퀀스는 소스 코드에 직접 표현할 수 없는 공백 문자 및 제어 문자에 대응합니다. 개행 문자는 \n, 탭은 \t, 리터럴 백슬래시는 \\로 표현합니다. 이 규칙은 C 프로그래밍 언어(ISO/IEC 9899)에서 유래하여 JavaScript(ECMA-262), Python, Java, Go, Rust에 채택되었습니다. JSON(RFC 8259)도 동일한 문법을 사용하지만 지원하는 시퀀스 집합이 더 작습니다.

언이스케이프("de-escaping"이라고도 함)는 반대 연산으로, 이스케이프 시퀀스를 원래 문자로 되돌립니다. 로그 파일을 읽거나 API 응답을 파싱하거나 이중 이스케이프된 데이터를 디버깅할 때 자주 사용됩니다. 두 작업 모두 손으로 직접 처리하면 실수하기 쉬우므로, 개발자들은 여러 줄 문자열, 중첩 따옴표, 유니코드 문자를 다룰 때 이스케이프/언이스케이프 도구를 사용합니다.

온라인 문자열 이스케이프 도구를 사용하는 이유

백슬래시를 수동으로 추가하거나 제거하는 작업은 번거롭고 실수하기 쉽습니다. 특히 중첩 따옴표나 여러 줄 입력이 있을 때 더욱 그렇습니다. 브라우저 기반 문자열 이스케이프 도구는 REPL을 설정하거나 임시 스크립트를 작성할 필요 없이 즉각적인 결과를 제공합니다.

즉각적인 변환
텍스트를 붙여넣으면 이스케이프 또는 언이스케이프 결과를 바로 확인할 수 있습니다. 터미널을 열거나 REPL을 시작하거나 일회용 스크립트를 작성할 필요가 없습니다.
🔀
형식 간 전환
JavaScript, Python, JSON 이스케이프 모드 간에 전환할 수 있습니다. 언어마다 작은따옴표, 유니코드, 제어 문자를 다르게 처리하며, 도구가 올바른 규칙을 자동으로 적용합니다.
🔒
개인정보 보호 우선 처리
모든 이스케이프 및 언이스케이프 처리는 JavaScript를 사용하여 브라우저에서 직접 이루어집니다. 문자열이 서버로 전송되지 않으므로 API 키, 토큰, 사용자 데이터를 다룰 때 안전합니다.
📋
로그인 또는 설치 불필요
페이지를 열고 바로 붙여넣기를 시작하면 됩니다. 계정을 만들 필요도, 확장 프로그램을 설치할 필요도, 쿠키 동의 화면도 없습니다.

문자열 이스케이프 활용 사례

프론트엔드 개발
사용자 생성 콘텐츠를 HTML 속성, 인라인 스크립트, 템플릿 리터럴에 삽입하기 전에 이스케이프합니다. 이스케이프되지 않은 따옴표나 꺾쇠 괄호로 인한 마크업 오류와 XSS 취약점을 방지합니다.
백엔드 API 통합
개행 문자, 탭, 따옴표가 포함된 문자열이 있는 JSON 요청 본문을 구성합니다. 올바른 이스케이프 처리는 수신 API에서 400 오류를 유발하는 잘못된 형식의 JSON을 방지합니다.
DevOps 및 설정
JSON 설정 파일, YAML 히어독, 환경 변수에 사용할 이스케이프된 문자열을 작성합니다. Dockerfile ENV나 Kubernetes ConfigMap에서 잘못 배치된 백슬래시 하나가 배포를 중단시킬 수 있습니다.
QA 및 테스트 데이터
제어 문자, 유니코드 시퀀스, 중첩 따옴표가 포함된 테스트 문자열을 생성합니다. 이러한 엣지 케이스 문자열은 파서와 직렬화기가 특수 문자를 올바르게 처리하는지 검증하는 데 필요합니다.
데이터 엔지니어링
CSV 내보내기, 로그 집계기, 데이터베이스 덤프에서 나온 이중 이스케이프된 데이터를 정리합니다. 여러 직렬화 레이어를 거친 필드에는 제거해야 할 불필요한 백슬래시가 누적되는 경우가 많습니다.
학습 및 디버깅
서로 다른 언어가 동일한 문자열을 어떻게 표현하는지 확인합니다. 언어를 처음 배우는 학생과 개발자는 JavaScript, Python, JSON 이스케이프를 나란히 비교하여 차이점을 이해할 수 있습니다.

이스케이프 시퀀스 참조표

아래 표는 일반적인 이스케이프 시퀀스와 JavaScript, Python, JSON에서의 지원 여부를 나열합니다. 세 언어 모두 핵심 집합(개행, 탭, 백슬래시, 큰따옴표)을 공유하지만, 작은따옴표, 16진수 이스케이프, 확장 유니코드 표기법에서는 차이가 있습니다.

시퀀스의미JavaScriptPythonJSON
\nNewline (LF)YesYesYes
\rCarriage returnYesYesYes
\tTabYesYesYes
\\BackslashYesYesYes
\"Double quoteYesYesYes
\'Single quoteYesYesNo
\bBackspaceYesYesYes
\fForm feedYesYesYes
\vVertical tabYesYesNo
\0Null characterYesYesNo
\xNNHex byteYesYesNo
\uNNNNUnicode (BMP)YesYesYes
\u{N..}Unicode (full)YesNoNo

JavaScript vs Python vs JSON 이스케이프 비교

이 세 형식은 같은 백슬래시 기반 문법을 공유하지만, 유효한 시퀀스와 엣지 케이스 처리 방식이 다릅니다. 잘못된 모드를 선택하면 겉으로는 올바르게 보이지만 파싱 시 오류가 발생하는 결과물이 나옵니다.

JavaScript
\x 16진수 이스케이프, BMP 이상의 전체 유니코드 범위를 위한 \u{...}, 수직 탭을 위한 \v, null 문자를 위한 \0을 지원합니다. 작은따옴표와 큰따옴표 모두 이스케이프할 수 있습니다. 템플릿 리터럴(백틱)을 사용하면 대부분의 이스케이프가 필요 없습니다.
Python
JavaScript와 동일한 핵심 시퀀스 외에, \x 16진수 이스케이프와 이름으로 유니코드 문자를 지정하는 \N{name}을 지원합니다. 로우 문자열(r"...")은 이스케이프 처리를 완전히 비활성화합니다. 작은따옴표와 큰따옴표 모두 이스케이프할 수 있습니다.
JSON
가장 제한적인 형식입니다. \"(큰따옴표), \\, \/, \n, \r, \t, \b, \f, \uNNNN만 유효합니다. 작은따옴표 이스케이프는 없습니다(JSON 문자열은 항상 큰따옴표를 사용합니다). 16진수 이스케이프, \v, \0도 지원하지 않습니다. 제어 문자(U+0000~U+001F)는 반드시 \uNNNN 표기법을 사용해야 합니다.

코드 예시

JavaScript, Python, Go 및 커맨드 라인에서 문자열을 이스케이프하고 언이스케이프하는 예시입니다.

JavaScript
// Escape a string with special characters
const raw = 'Line 1\nLine 2\tTabbed "quoted"';
const escaped = JSON.stringify(raw);
// → '"Line 1\\nLine 2\\tTabbed \\"quoted\\""'

// Unescape a JSON string value
const input = '"Hello\\nWorld"';
const unescaped = JSON.parse(input);
// → "Hello\nWorld" (actual newline character)

// Template literals don't need quote escaping
const tpl = `She said "hello"`;
// → 'She said "hello"' — no backslashes needed

// Escape for use inside a RegExp
const query = 'price: $5.00 (USD)';
const safe = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
// → "price: \\$5\\.00 \\(USD\\)"
Python
# Escape with repr() — shows escape sequences
raw = "Line 1\nLine 2\t'quoted'"
print(repr(raw))
# → "Line 1\nLine 2\t'quoted'"

# Raw strings skip escape processing
path = r"C:\Users\name\Documents"
print(path)
# → C:\Users\name\Documents (backslashes kept literal)

# JSON escaping with json module
import json
data = 'He said "hello\nworld"'
escaped = json.dumps(data)
# → '"He said \\"hello\\nworld\\""'

# Unicode escaping
text = "Caf\u00e9"  # → "Café"
print(text.encode('unicode_escape').decode())
# → "Caf\\xe9"
Go
package main

import (
    "fmt"
    "strconv"
    "encoding/json"
)

func main() {
    // strconv.Quote adds escape sequences and wraps in quotes
    raw := "Line 1\nLine 2\t\"quoted\""
    fmt.Println(strconv.Quote(raw))
    // → "\"Line 1\\nLine 2\\t\\\"quoted\\\"\""

    // strconv.Unquote reverses it
    unescaped, _ := strconv.Unquote(`"hello\nworld"`)
    fmt.Println(unescaped)
    // → hello
    //   world

    // JSON marshal handles escaping automatically
    b, _ := json.Marshal("tabs\there & \"quotes\"")
    fmt.Println(string(b))
    // → "tabs\there \u0026 \"quotes\""
}
CLI (Bash)
# Use $'...' syntax for escape sequences in bash
echo $'Line 1\nLine 2\tTabbed'
# → Line 1
#    Line 2	Tabbed

# printf interprets escape sequences
printf 'Path: C:\\Users\\name\n'
# → Path: C:\Users\name

# Use jq to escape a string for JSON
echo 'He said "hello"' | jq -Rs .
# → "He said \"hello\"\n"

# Unescape JSON string with jq
echo '"Line 1\\nLine 2"' | jq -r .
# → Line 1
#    Line 2

자주 묻는 질문

이스케이프와 인코딩의 차이점은 무엇인가요?
이스케이프는 언어 파서가 특수 문자를 구문이 아닌 데이터로 처리하도록 문자열 리터럴 내 특수 문자 앞에 백슬래시를 추가합니다. 인코딩은 문자열 전체를 다른 표현으로 변환합니다. 예를 들어 Base64 인코딩은 바이너리를 ASCII 텍스트로 변환하고, URL 인코딩은 안전하지 않은 문자를 퍼센트-16진수 시퀀스로 대체합니다. 이스케이프는 가독성을 유지하지만, 인코딩은 형식 자체를 변경합니다.
문자열에 단일 백슬래시 대신 이중 백슬래시(\\\\)가 나타나는 이유는 무엇인가요?
이중 백슬래시는 문자열이 두 번 이스케이프될 때 나타납니다. 데이터가 여러 직렬화 레이어를 거칠 때 자주 발생합니다. 예를 들어 다른 JSON 문자열 안에 저장된 JSON 값이나, 파일에 기록되기 전에 JSON 인코딩된 로그 라인이 이에 해당합니다. 수정하려면 원본 내용에 도달할 때까지 한 번에 한 레이어씩 언이스케이프하세요.
JavaScript에서 JSON용 문자열을 이스케이프하는 방법은?
JSON.stringify()를 사용하세요. 문자열을 큰따옴표로 감싸고 JSON에 필요한 모든 문자(백슬래시, 큰따옴표, 개행, 탭, U+0020 미만의 제어 문자)를 이스케이프합니다. 주변 따옴표 없이 내부 내용만 원한다면 JSON.stringify(str).slice(1, -1)을 사용하세요.
JSON 문자열에 작은따옴표를 포함할 수 있나요?
아니요. JSON 명세(RFC 8259)는 모든 문자열이 큰따옴표로 구분되어야 한다고 요구합니다. 작은따옴표는 JSON에서 유효한 문자열 구분자가 아닙니다. 일부 관대한 파서는 허용하지만, 표준 준수 JSON 파서는 작은따옴표로 감싼 문자열을 거부합니다. 문자열에 작은따옴표 문자가 포함된 경우, 큰따옴표로 묶인 JSON 안에서는 이스케이프 없이 그대로 사용할 수 있습니다.
Python의 로우 문자열이란 무엇인가요?
로우 문자열(r"C:\Users\name"처럼 r 접두사가 붙은)은 Python 인터프리터에게 백슬래시를 이스케이프 마커가 아닌 리터럴 문자로 처리하도록 지시합니다. Windows 파일 경로, 정규 표현식, 백슬래시를 그대로 유지해야 하는 문자열에 유용합니다. 단, 로우 문자열은 홀수 개의 백슬래시로 끝날 수 없습니다. 끝의 백슬래시가 닫는 따옴표를 이스케이프하기 때문입니다.
JavaScript에서 유니코드 문자를 이스케이프하는 방법은?
JavaScript는 두 가지 유니코드 이스케이프 형식을 지원합니다. \uNNNN 문법은 기본 다국어 평면(U+0000~U+FFFF)의 문자를 처리합니다. 예를 들어 'e with acute'는 \u00e9입니다. BMP 외부의 문자(이모지, 희귀 문자)의 경우 최대 6개의 16진수 자리를 사용하는 \u{NNNNN} 형식을 사용합니다. 예를 들어 웃는 얼굴 이모지는 \u{1F600}입니다. \u{'} 형식은 ES2015에서 도입되었습니다.
문자열 이스케이프는 보안(XSS, SQL 인젝션)과 관련이 있나요?
언어 수준의 이스케이프와 보안 이스케이프는 서로 다른 목적을 갖지만 개념은 동일합니다. 특수 문자가 코드로 해석되는 것을 방지하는 것입니다. XSS 방지를 위해서는 HTML 엔티티(<, >, &)를 이스케이프합니다. SQL 인젝션의 경우 수동 이스케이프 대신 파라미터화된 쿼리를 사용합니다. 이 도구는 언어 수준의 문자열 이스케이프(백슬래시 시퀀스)를 처리하며, HTML이나 SQL 이스케이프는 처리하지 않습니다.