도구스개발

Quoted-Printable 인코딩 변환기

이메일 원문에서 보이는 =EC=95=88 같은 Quoted-Printable을 서로 변환합니다. 줄 끝의 =는 줄바꿈이 아니라 이어짐 표시이며, 76자 제한과 줄 끝 공백 규칙까지 그대로 지킵니다.

메일에 실을 본문을 넣으세요

Quoted-Printable

=EC=95=88=EB=85=95=ED=95=98=EC=84=B8=EC=9A=94, =EB=8F=84=EA=B5=AC=EC=8A=A4= =EC=9E=85=EB=8B=88=EB=8B=A4.

원문 바이트 (UTF-8)36 바이트
인코딩 결과 길이105
몇 배로 늘었나2.917
=XX로 바뀐 바이트33
soft line break1
되짚어 확인원문으로 정확히 되돌아옵니다
길이가 2.92배로 늘었습니다 — 이 본문은 Base64가 더 짧습니다. 한글은 한 글자가 UTF-8 3바이트이고 바이트마다 =XX 세 글자가 붙어 정확히 세 배가 됩니다. Base64는 3바이트를 4글자로 담아 1.33배이므로, 한글이 많은 메일은 Base64를 쓰는 편이 훨씬 짧습니다. Quoted-Printable의 값어치는 영문이 많을 때 사람이 알아볼 수 있다는 것에 있습니다.
줄 끝의 = 는 줄바꿈이 아닙니다. 다음 줄로 이어진다는 표시입니다. 한 줄이 = 를 포함해 76자를 넘을 수 없어 그 자리에서 끊는 것이고, 디코딩할 때 = 와 뒤따르는 줄바꿈을 통째로 지워야 원문이 돌아옵니다. 원문에 실제로 있던 줄바꿈과 구별하지 못하면 문단이 뭉개지거나 없던 줄바꿈이 생깁니다.
규칙은 넷입니다.1. 인쇄 가능한 ASCII(33~126)는 그대로. 단 = 만은 예외2. = 는 언제나 =3D — 이스케이프 문자 자신이므로3. 공백·탭은 그대로 두되 줄 끝에서는 =20 · =09로4. 그 밖의 모든 바이트는 =XX (대문자 16진)3번이 있는 이유는 메일 서버가 줄 끝 공백을 조용히 잘라 버리기 때문입니다. 인코딩해 두지 않으면 원문이 소리 없이 바뀝니다.
UTF-8을 전제로 읽고 씁니다. EUC-KR로 인코딩된 오래된 메일은 =XX를 되돌린 바이트가 UTF-8로 해석되지 않아 깨져 보입니다. 디코딩할 때는 CRLF와 LF를 모두 이어짐 표시로 인정하고 16진의 대소문자를 가리지 않는데, 실제 메일에 규격을 조금씩 벗어난 것이 섞여 오기 때문입니다.
RFC 2045는 헤더에 쓰는 별도 형식(=?UTF-8?Q?…?=)도 정의하는데 규칙이 조금 다릅니다. 이 변환기는 본문용만 다룹니다. 제목 줄이 그런 꼴이라면 그대로 넣지 마시고 =?…?= 로 감싼 부분을 벗겨 낸 뒤 가운데만 넣어 주세요.

사용 방법

  1. 1이메일 원문에서 복사한 텍스트를 넣고 디코딩을 고릅니다.
  2. 2반대로 평문을 넣고 인코딩하면 메일에 실리는 형태가 나옵니다.
  3. 376자 줄 끊기를 켜면 실제 메일과 같은 모양이 됩니다.
  4. 4늘어난 길이를 확인합니다. 한글이 많으면 Base64가 더 짧습니다.

자주 묻는 질문

ASCII는 그대로 두고 나머지 바이트만 =XX로 적는 이메일 인코딩입니다. RFC 2045 §6.7에 정의되어 있으며, 영문이 많은 본문에서는 Base64보다 사람이 알아보기 쉽습니다. 이메일 원문(.eml)을 열었을 때 =EC=95=88 같은 것이 줄줄이 보인다면 이 방식입니다.

줄바꿈이 아니라 다음 줄로 이어진다는 표시입니다. Quoted-Printable은 한 줄이 =를 포함해 76자를 넘을 수 없어서, 넘치면 그 자리에서 끊고 =를 붙입니다. 디코딩할 때 =와 뒤따르는 줄바꿈을 통째로 지워야 원문이 돌아옵니다. 원문에 실제로 있던 줄바꿈과 구별하지 못하면 문단이 뭉개지거나 없던 줄바꿈이 생깁니다.

한 글자가 UTF-8로 3바이트이고, 바이트마다 =XX 세 글자가 붙어 정확히 세 배가 되기 때문입니다. 안녕하세요 다섯 글자는 15바이트라 =EC=95=88=EB=85=95=ED=95=98=EC=84=B8=EC=9A=94로 45자가 됩니다. Base64는 3바이트를 4글자로 담아 1.33배이므로, 한글이 많은 메일은 Base64를 쓰는 편이 훨씬 짧습니다.

메일 서버가 줄 끝 공백을 조용히 잘라 버리기 때문입니다. 인코딩해 두지 않으면 원문이 소리 없이 바뀝니다. 그래서 공백과 탭은 줄 한가운데서는 그대로 두지만 줄 끝에서는 반드시 =20, =09로 적습니다. RFC가 정한 규칙이며 이 변환기도 그대로 따릅니다.

=가 이스케이프 문자 자신이기 때문입니다. 그대로 두면 뒤따르는 두 글자를 16진수로 읽어 버리므로 예외 없이 =3D로 적어야 합니다. 3D는 =의 ASCII 코드 61을 16진으로 쓴 것입니다.

원문을 여기에 붙여 넣고 디코딩해 보면 인코딩 문제인지 문자셋 문제인지 갈립니다. =XX가 보이는데 글자가 안 나오면 Quoted-Printable 자체는 맞는데 문자셋이 UTF-8이 아닐 수 있고, =XX가 아예 없는데 깨졌다면 다른 원인입니다. 이 변환기는 UTF-8로 읽으며, 잘못된 =XX를 만나면 그 자리를 표시해 줍니다.

전송되지 않습니다. 변환은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • UTF-8을 전제로 읽고 씁니다. EUC-KR로 인코딩된 오래된 메일은 =XX를 되돌린 바이트가 UTF-8로 해석되지 않아 깨져 보입니다.
  • 디코딩할 때 CRLF와 LF를 모두 soft line break로 인정하고, 16진은 대소문자를 모두 받습니다. 실제 메일에 규격을 조금씩 벗어난 것이 섞여 오기 때문입니다.
  • 인코딩할 때는 RFC대로 16진을 대문자로 적고 줄바꿈은 CRLF로 냅니다.
  • RFC 2045는 헤더에 쓰는 별도 형식(=?UTF-8?Q?…?=)도 정의하는데 규칙이 조금 다릅니다. 이 변환기는 본문용만 다룹니다.

함께 보면 좋은 도구

마지막 검증: 2026년 8월 31일 · 결과는 참고용 추정치입니다.