파일 업로드
  1. base64hub
  2. 텍스트 도구
  3. Base64 → XML

Base64를 XML로: XML 페이로드 디코딩

Base64를 붙여넣고 안에 든 XML을 읽으세요. 도구가 XML 문서를 알아보고 .xml로 저장하며, UTF-8, UTF-16, EUC-KR 같은 레거시 문자 인코딩도 처리합니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 업데이트 2026. 10. 27.
입력 0 B출력 0 B크기 –

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Base64를 XML로 디코딩하는 방법

  1. 입력 · Base64에 Base64를 붙여넣으세요. 페이지를 열면 작은 예시가 들어 있습니다.
  2. 출력 · 텍스트에 XML이 나타납니다. 상태 표시줄의 추정 형식에 XML이 표시되면 내용이 XML 문서처럼 시작한다는 뜻입니다.
  3. 출력의 글자 사이에 빈칸이 보이거나 바이너리 경고가 나오면 XML이 UTF-16입니다. 문자 인코딩을 UTF-16LE로 설정하거나, 바이트 순서 표시로 시작한다면 자동 감지로 설정하세요.
  4. 출력 복사는 텍스트를 복사합니다. 다운로드는 원래 바이트를 decoded.xml로 저장합니다.

예시 PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxub3RlPjx0bz55b3U8L3RvPjxib2R5PkhlbGxvPC9ib2R5Pjwvbm90ZT4=는 다음과 같이 디코딩됩니다.

<?xml version="1.0"?>
<note><to>you</to><body>Hello</body></note>

반대 방향은 XML을 Base64로입니다.

인코딩된 XML 알아보기

XML은 <로 시작하므로 Base64는 P로 시작하고, 그다음 문자들이 더 많은 것을 알려 줍니다.

Base64 시작 부분디코딩된 시작 부분대표적인 문서
PD94bWwg<?xml선언이 있는 모든 XML 파일
PHNhbWxwOlJlc3BvbnNl<samlp:ResponseSAML 로그인 응답(SAML 디코더)
PHNvYXA6RW52ZWxvcGU<soap:EnvelopeSOAP 메시지
PEludm9pY2U<InvoiceUBL 전자 인보이스
//48AD8AeABtAGwAUTF-16LE의 BOM + <?xmlUTF-16으로 저장된 XML

SAML이어야 하는 값이 P로 시작하지 않는다면 대개 압축된 XML입니다. 압축을 푸는 방법은 아래에서 설명합니다.

UTF-16과 다른 인코딩

XML은 대부분 UTF-8이며 디코더도 UTF-8로 가정합니다. 다음 두 경우에는 문자 인코딩을 바꿔야 합니다.

  • UTF-16 문서는 Windows 도구와 .NET에서 흔하며, ASCII 문자마다 0 바이트가 붙어 있습니다. UTF-8로 디코딩하면 바이너리 데이터처럼 보이고 도구도 그렇게 알려 줍니다. 자동 감지나 UTF-16LE를 선택하면 <?xml version="1.0" encoding="UTF-16"?>로 시작하는 전체 텍스트가 나타납니다. 다운로드는 바이트를 유지하지만 파일 이름을 decoded.bin으로 정하므로 확장자를 .xml로 바꾸세요.
  • Latin-1, Windows-1252, EUC-KR 같은 레거시 문서는 encoding="ISO-8859-1"이나 encoding="EUC-KR" 같은 선언을 담고 있습니다. UTF-8 모드에서는 악센트 문자나 한글이 �로 깨지므로, 선언된 문자 인코딩을 선택해 읽으세요.

출력 안의 XML 선언이 작성자가 의도한 문자 인코딩을 알려 줍니다. 내려받은 파일을 읽는 XML 파서는 그 선언을 따르므로, 화면 미리보기에서 문자 인코딩을 직접 골라야 했더라도 파일 자체는 문제없습니다.

Base64 XML은 어디서 오나

가장 흔한 출처는 SAML입니다. ID 공급자는 SAMLResponse를 Base64로 인코딩된 XML로 애플리케이션에 POST하며, 로그인 문제를 디버깅할 때는 보통 브라우저 네트워크 탭에서 이 값을 복사합니다. SOAP 서비스와 전자 인보이스 플랫폼은 문서와 첨부 파일을 Base64 필드로 돌려줍니다. 이메일은 XML 첨부 파일을 MIME Base64 파트로 실어 나르며, 이메일 디코더로 추출할 수 있습니다.

리디렉션 URL의 SAML SAMLRequest 값은 인코딩 전에 XML을 raw DEFLATE로 압축했기 때문에 일반 Base64 디코딩으로는 바이너리가 나옵니다. Gzip Base64 디코더가 압축을 풉니다. %2B, %2F, %3D 이스케이프는 자동으로 디코딩되며, 전체가 URL 인코딩된 값이라면 먼저 URL 디코더를 사용하세요.

코드에서 Base64를 XML로

디코딩된 바이트를 문자열로 바꾸지 말고 그대로 XML 파서에 넘기세요. 그러면 파서가 선언에서 직접 인코딩을 읽습니다.

import base64
import xml.etree.ElementTree as ET

s = "PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxub3RlPjx0bz55b3U8L3RvPjxib2R5PkhlbGxvPC9ib2R5Pjwvbm90ZT4="
root = ET.fromstring(base64.b64decode(s))
root.find("body").text   # 'Hello'
// Browser
const s = "PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxub3RlPjx0bz55b3U8L3RvPjxib2R5PkhlbGxvPC9ib2R5Pjwvbm90ZT4=";
const bytes = Uint8Array.from(atob(s), c => c.charCodeAt(0));
const doc = new DOMParser().parseFromString(new TextDecoder().decode(bytes), "application/xml");

브라우저에서 UTF-16이나 Latin-1 XML을 다룰 때는 TextDecoder에 알맞은 레이블을 넘기세요. 자세한 내용은 Python에서 Base64와 JavaScript에서 Base64에 있습니다.

자주 묻는 질문

Base64를 XML 파일로 디코딩하려면 어떻게 하나요?

위에 Base64를 붙여넣으세요. 상태 표시줄에 XML이라고 나오면 다운로드가 디코딩된 바이트를 원래 인코딩과 서명까지 그대로 유지한 채 바이트 단위로 decoded.xml에 저장합니다.

Base64에 XML이 들어 있는지 어떻게 알 수 있나요?

XML 선언이 있는 문서는 PD94bWwg(<?xml )로 시작합니다. 선언이 없어도 모든 문서가 <로 시작하므로 문자열은 P로 시작합니다. PHNhbWxwOlJlc3BvbnNl은 <samlp:Response입니다.

도구가 XML을 정렬하거나 들여쓰기해 주나요?

아니요. XML은 디코딩된 그대로 표시됩니다. JSON 보기 좋게 정렬 옵션은 JSON에만 적용됩니다. 서명된 XML에서는 형식을 조금만 바꿔도 내용이 달라지므로 원래 바이트를 보여 주는 것이 중요합니다.

디코딩한 SAML 요청이 무작위 바이트처럼 보이는 이유는 무엇인가요?

리디렉션 URL로 보내는 SAML 요청은 Base64로 인코딩하기 전에 raw DEFLATE로 압축됩니다. Gzip Base64 디코더로 압축을 풀거나 SAML 디코더에서 여세요.