it-box

문자열 이스케이프 변환기

텍스트와 JSON 문자열 리터럴을 안전하게 서로 변환합니다.

문자열 이스케이프 변환기 도구 열기

큰따옴표, 줄바꿈, 유니코드 문자가 들어간 텍스트를 JSON 문자열 리터럴로 바꾸고, 반대로 JSON 문자열 리터럴을 원래 텍스트로 되돌립니다.

사용 순서

  1. 변환 방향을 텍스트에서 JSON 문자열, 또는 JSON 문자열에서 텍스트 중 하나로 고릅니다.
  2. 원본 텍스트를 입력하거나, 큰따옴표로 감싼 JSON 문자열 리터럴을 입력합니다.
  3. 결과를 복사해 설정 파일이나 JSON 본문에 붙여 넣습니다.

예시

두 줄로 된 입력 Hello "world"와 안녕을 인코딩하면 결과는 "Hello \"world\"\n안녕" 형태가 됩니다. 바깥 큰따옴표와 줄바꿈 이스케이프가 함께 붙습니다.

한계

JSON 문자열 규칙만 지원합니다. 디코딩은 큰따옴표로 감싼 문자열 하나만 받으며, 숫자, 배열, 객체, null, 작은따옴표 문자열은 거부합니다. JavaScript나 C 언어의 이스케이프 규칙과는 다를 수 있습니다.

보안 주의

디코딩 결과에는 실제 줄바꿈과 따옴표가 들어 있으므로 HTML이나 SQL에 그대로 이어 붙이면 안 됩니다. JSON 이스케이프는 문자열의 경계만 지켜 줄 뿐 주입 공격을 막지 못합니다.

배경 지식

JSON은 문자열 안에서 큰따옴표, 역슬래시, 줄바꿈, 탭 같은 문자를 백슬래시 이스케이프로 표현합니다. 줄바꿈은 \n 두 글자로 바뀌고, 큰따옴표는 \"가 됩니다. 나머지 제어 문자는 \u0001처럼 네 자리 16진수로 적습니다. 이 규칙 덕분에 한 줄짜리 JSON 값 안에 여러 줄의 텍스트를 담을 수 있습니다.

설정 파일이나 API 요청 본문에 문장을 넣을 때 이 규칙을 손으로 맞추기는 번거롭고 실수하기 쉽습니다. 따옴표 하나만 빠져도 JSON 전체가 파싱되지 않습니다. 그래서 대부분의 언어는 JSON.stringify처럼 텍스트를 안전한 리터럴로 만들어 주는 함수를 제공합니다.

역변환은 반대 순서로 동작합니다. 백슬래시 다음 글자를 해석해 원래 문자로 바꾸는데, 올바른 JSON 문자열이 아니면 해석을 멈춰야 합니다. 이 도구는 eval 없이 JSON.parse만 사용하므로 입력값이 코드로 실행되지 않습니다. 인코딩 쪽도 JSON.stringify만 쓰므로 결과에 실행할 수 있는 코드가 생기지 않습니다. 다만 결과를 다른 언어의 문자열 리터럴로 옮길 때는 그 언어의 이스케이프 규칙을 따로 확인해야 합니다.

자주 묻는 질문

인코딩 결과의 바깥 큰따옴표는 꼭 필요한가요?

네. JSON 문자열 값은 큰따옴표로 감싸야 하므로 결과에 바깥 따옴표가 포함됩니다. 이 결과를 JSON 값 자리에 그대로 넣으면 됩니다.

\uD55C 같은 유니코드 이스케이프도 디코딩되나요?

네. JSON.parse는 \u 뒤의 네 자리 16진수를 해당 글자로 바꿉니다. 다만 서로게이트 쌍이 깨진 입력은 올바르지 않은 문자가 그대로 남을 수 있습니다.

작은따옴표로 감싼 문자열은 왜 디코딩되지 않나요?

JSON 명세는 큰따옴표 문자열만 허용합니다. 작은따옴표 문자열은 JavaScript나 Python에서는 쓸 수 있지만 JSON 파서에서는 문법 오류가 됩니다. 큰따옴표로 바꾼 뒤 다시 입력하세요.