JVBERi0로 시작하는 Base64는 어떤 파일인가요?
JVBERi0 = PDF PDF입니다. 모든 PDF는 `%PDF-` 바이트로 시작하며, 이를 Base64로 인코딩하면 `JVBERi0`가 됩니다. 마찬가지로 `iVBORw0KGgo`는 PNG, `/9j/`는 JPEG, `UEsDB`는 ZIP(DOCX, XLSX 포함)입니다.
Base64 PDF 변환 온라인 도구. data URI·JSON 응답도 그대로 붙여넣으면 실제 형식을 판별해 미리보기·다운로드하고, 안 열리는 원인도 알려 줍니다. 업로드 없음.
전처리:
PDF나 다른 파일을 여기에 끌어다 놓거나 클릭해 선택
모든 형식 · 최대 50 MB · 업로드 안 함
모든 파일 형식은 정해진 '매직' 바이트로 시작하므로 그 Base64도 정해진 문자로 시작합니다. 아래 접두사는 이 도구와 같은 엔진이 실제 파일 헤더로 계산한 값입니다.
| Base64 시작 문자 | 파일 형식 | 매직 바이트(16진수) |
|---|---|---|
JVBERi0 | 25 50 44 46 2D | |
iVBORw0KGgoAAAANSUhEU | PNG | 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 |
/9j/ | JPEG | FF D8 FF |
R0lGOD | GIF | 47 49 46 38 |
UEsDB | ZIP / DOCX / XLSX / PPTX | 50 4B 03 04 |
0M8R4KGxGu | Office 97–2003 (DOC/XLS/PPT) | D0 CF 11 E0 A1 B1 1A E1 |
H4sI | Gzip | 1F 8B 08 |
UklGR | RIFF (WebP / WAV / AVI) | 52 49 46 46 |
SUQz | MP3 (ID3) | 49 44 33 |
e1xydG | RTF | 7B 5C 72 74 66 |
Go Tools의 인코딩 도구를 개발하는 엔지니어가 작성하고 검토했습니다. 이 페이지의 모든 길이, 접두사, 예시는 페이지 자체의 엔진으로 계산하고 자동화 테스트로 검증합니다.
JVBERi0 = PDF PDF입니다. 모든 PDF는 `%PDF-` 바이트로 시작하며, 이를 Base64로 인코딩하면 `JVBERi0`가 됩니다. 마찬가지로 `iVBORw0KGgo`는 PNG, `/9j/`는 JPEG, `UEsDB`는 ZIP(DOCX, XLSX 포함)입니다.
+33.3% 3바이트마다 4문자가 되므로 약 33.3% 커집니다. 1 MB(1,048,576바이트) PDF는 1,398,104문자가 됩니다. 이메일 첨부처럼 76문자마다 줄바꿈을 넣으면 1,434,896문자로, 약 36.8% 커집니다.
Base64는 임의의 바이트를 안전한 텍스트 문자 64개(A–Z, a–z, 0–9, +, /)와 패딩 문자 =만으로 표현하는 방식으로, 3바이트가 4문자가 됩니다. 덕분에 PDF 같은 바이너리 파일을 JSON 필드, XML 요소, 이메일 본문, 데이터베이스 텍스트 열처럼 텍스트만 다루는 경로로 보낼 수 있습니다. Base64를 PDF로 변환하는 것은 이 과정을 거꾸로 하는 것입니다. 문자를 다시 바이트로 바꾸고 .pdf 확장자로 저장하면 됩니다. 문제는 실제로 받는 Base64가 깔끔한 경우가 드물다는 점입니다. data: 접두사, JSON 이스케이프, 줄바꿈이 섞여 있거나 다른 알파벳을 쓰는 경우가 많고, 많은 변환기가 아무 경고 없이 열리지 않는 파일을 만들어 냅니다.
%PDF-1.4 → bytes 25 50 44 46 2D 31 2E 34 JVBERi0xLjQ= → the same bytes in Base64 data:application/pdf;base64,JVBERi0xLjQ= → data URI form
data URI, \/와 \n JSON 이스케이프, 따옴표, MIME 줄바꿈, URL 안전 문자 - _, URL에서 복사한 %2B %2F, PEM 헤더, 빠진 = 패딩을 자동으로 처리하고, 수행한 단계를 하나씩 보여 줍니다.
{"code":0,"data":{"file":"JVBERi0…"}}를 그대로 붙여넣으세요. Base64처럼 보이는 가장 긴 필드를 사용하고 그 경로(data.file)를 표시하므로, 어떤 필드를 디코딩했는지 알 수 있습니다.
PDF, PNG, JPEG, GIF, WebP, DOCX, XLSX, PPTX, ZIP, GZIP, MP3, MP4 등 50가지가 넘는 형식을 첫 바이트로 인식합니다. 접두사에 다른 형식이 적혀 있어도 다운로드 파일에는 올바른 확장자가 붙습니다.
%%EOF가 없는 PDF(복사 누락이나 열 길이 제한으로 잘림), 두 번 인코딩된 Base64, Base64로 붙여넣은 16진수, gzip으로 압축된 데이터, 암호화된 PDF를 각각 따로 알려 줍니다.
PDF는 브라우저 내장 뷰어로 열리고, 이미지와 SVG는 이미지로, 텍스트와 JSON은 텍스트로 표시됩니다. HTML은 이 페이지에서 실행될 수 있으므로 렌더링하지 않고 소스만 보여 줍니다.
최대 50 MB 파일을 끌어다 놓으면 순수 Base64 또는 data URI로 출력합니다. URL 안전 형식이나 76문자 줄바꿈을 선택할 수 있고, 정확한 크기 증가율도 표시합니다.
base64.b64decode open('out.pdf', 'wb').write(base64.b64decode(s)). -와 _가 있으면 urlsafe_b64decode를 쓰세요. b64decode는 validate=True를 넘기지 않는 한 줄바꿈을 무시합니다.
java.util.Base64 Files.write(Path.of("out.pdf"), Base64.getMimeDecoder().decode(s)). getDecoder()는 줄바꿈을 거부하고, getUrlDecoder()는 -와 _용입니다.
Buffer fs.writeFileSync('out.pdf', Buffer.from(s, 'base64')). Buffer는 두 알파벳을 모두 받고 공백도 무시하지만, 그 밖의 잘못된 문자도 오류 없이 건너뛰므로 결과가 %PDF-로 시작하는지 확인하세요.
atob / Uint8Array.fromBase64 Blob을 생성하기 전에 Uint8Array를 구성하세요. Uint8Array.fromBase64()는 비교적 새로운 내장 메서드이므로 대상 브라우저의 지원 여부를 확인하세요.
base64_decode file_put_contents('out.pdf', base64_decode($s, true)). true를 넘겨 엄격 모드로 쓰지 않으면 잘못된 문자가 아무 경고 없이 버려집니다.
Convert.FromBase64String File.WriteAllBytes("out.pdf", Convert.FromBase64String(s)). 공백 문자는 허용되지만 -와 _는 허용되지 않습니다.
base64 -d / certutil macOS와 Linux: base64 -d < in.txt > out.pdf. Windows: certutil -decode in.txt out.pdf.
JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4K…
PDF · 버전 1.4 · file.pdf로 저장
JVBERi0, 즉 %PDF-로 시작합니다. 정리할 것이 없으므로 그대로 디코딩합니다.
"data:application\/pdf;base64,JVBERi0xLjQK…"
전처리: 앞뒤 따옴표 제거 → JSON 이스케이프 복원 → data URI 접두사 제거(application/pdf)
PHP의 json_encode와 일부 Java 직렬화 라이브러리는 /를 \/로 씁니다. 이를 복원하지 않는 디코더에 붙여넣으면 백슬래시가 잘못된 문자가 됩니다.
{"code":0,"data":{"name":"invoice.pdf","file":"JVBERi0xLjQK…"}} 전처리: JSON에서 data.file 필드를 꺼냄
문자열을 직접 잘라낼 필요가 없습니다. Base64처럼 보이는 가장 긴 필드를 사용하고 그 경로를 표시합니다.
data:application/pdf;base64,iVBORw0KGgoAAAANSUhEUgAA…
경고: data URI에는 application/pdf라고 되어 있지만 실제 바이트는 PNG입니다. file.png로 저장했습니다
많은 변환기가 어떤 뷰어로도 열리지 않는 .pdf를 써 버립니다. 여기서는 표시된 형식보다 매직 바이트를 우선합니다.
255044462d312e370a…
경고: 16진수로 보입니다. 16진수로 읽으면 PDF입니다. [16진수로 디코딩]
16진수 문자는 모두 유효한 Base64 문자이므로 Base64 디코딩이 실패하지 않고, 아무 경고 없이 의미 없는 데이터를 만들어 냅니다. 25 50 44 46은 %PDF입니다.
순수 Base64, data:application/pdf;base64,…, JSON에서 복사해 \/ 이스케이프가 섞인 문자열, API 응답 전체 모두 됩니다. 아주 긴 문자열은 붙여넣기보다 .txt 파일 열기를 사용하세요.
입력란 아래에 접두사 제거, 이스케이프 복원, 패딩 추가, JSON에서 꺼낸 필드 등 수행한 전처리가 모두 나열됩니다. 입력에 문제가 있으면 오류 메시지가 해당 문자와 위치를 정확히 알려 줍니다.
배지에는 파일의 매직 바이트로 읽은 형식이 표시됩니다. 실제로는 PDF가 아닐 때, data URI가 형식을 잘못 표시할 때, PDF가 %%EOF 앞에서 잘렸을 때 노란색 안내가 나타납니다.
PDF는 브라우저 내장 뷰어로 열리고, 이미지와 텍스트는 바로 표시됩니다. 필요하면 파일 이름을 바꾼 뒤 다운로드를 누르세요. 반대 방향은 PDF / 파일 → Base64로 전환해 파일을 끌어다 놓으면 됩니다.
data:application/pdf;base64,는 Base64의 일부가 아닙니다. 그대로 두면 오류가 나거나(:와 ;는 잘못된 문자), 관대한 디코더에서는 앞부분 바이트가 깨져 파일이 더 이상 %PDF-로 시작하지 않습니다.
base64.b64decode(value) # value = 'data:application/pdf;base64,JVBERi0…'
b64 = value.split(',', 1)[1] if value.startswith('data:') else value
pdf = base64.b64decode(b64) PDF는 바이너리입니다. 디코딩 결과를 문자열로 바꾼 뒤 텍스트 인코딩으로 쓰면 잘못된 바이트가 치환되고 줄바꿈 문자가 바뀌어 상호 참조 테이블이 깨집니다.
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64').toString()) fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64')) Java의 Base64.getDecoder()는 줄바꿈을 거부합니다. 그런데 이메일이나 Linux base64 명령이 출력하는 Base64는 76문자마다 줄이 바뀝니다. MIME 디코더를 쓰거나 먼저 공백 문자를 제거하세요.
byte[] pdf = Base64.getDecoder().decode(wrapped); // IllegalArgumentException
byte[] pdf = Base64.getMimeDecoder().decode(wrapped);
JWT와 많은 URL 파라미터는 +와 / 대신 -와 _를 쓰고 = 패딩을 생략합니다. 표준 디코더는 이를 거부하거나 잘못된 바이트로 디코딩합니다.
base64.b64decode(token_part) # contains - and _
base64.urlsafe_b64decode(token_part + '=' * (-len(token_part) % 4))
브라우저의 atob는 1바이트를 1문자로 담은 '바이너리 문자열'을 반환합니다. 이를 new Blob([str])에 넘기면 UTF-8로 인코딩되어 127보다 큰 바이트가 모두 2바이트가 됩니다. 먼저 Uint8Array로 복사하세요.
new Blob([atob(b64)], { type: 'application/pdf' }) const bytes = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
new Blob([bytes], { type: 'application/pdf' }) PDF는 %%EOF로 끝납니다. Base64가 VARCHAR 열, 로그 줄 길이 제한, 불완전한 복사 때문에 잘렸다면 디코딩은 되지만 뷰어에서 오류가 나거나 페이지가 빠집니다. 보낸 쪽이 만든 길이와 비교해 보세요.
SELECT LENGTH(pdf_b64) FROM docs; -- 65535: suspiciously round
ALTER TABLE docs MODIFY pdf_b64 LONGTEXT; -- or store the bytes in a BLOB
{"filename": …, "content": "<base64>"} 형식을 요구합니다. 여기서 파일을 인코딩해 Postman이나 cURL용 테스트 요청을 구성할 수 있습니다.%%EOF가 없다는 안내가 나오면 열이나 로그 줄이 너무 짧아 잘렸다는 뜻입니다.+ /(표준, 4절)와 - _(URL·파일 이름 안전, 5절)입니다. URL 안전 Base64는 보통 = 패딩을 생략합니다. 한 문자열에 두 가지가 섞여 있다면 편집되었거나 이어 붙인 것입니다.= 패딩은 길이를 4의 배수로 맞춥니다. 패딩이 없을 때 4로 나눈 나머지가 2나 3이면 복원할 수 있지만, 나머지 1은 올바른 Base64에서는 나올 수 없습니다. 문자가 하나 빠졌거나 더해진 것입니다. 중간에 =가 있으면 대개 두 문자열이 이어 붙은 것입니다.%PDF-, PNG는 89 50 4E 47, DOCX와 XLSX 같은 ZIP 기반 형식은 50 4B 03 04입니다. 이 바이트가 Base64의 첫 문자들을 결정하므로 디코딩 전에도 형식을 알 수 있습니다. 도구 안의 표를 참고하세요.%%EOF로 끝납니다. 마지막 1,024바이트 안에 이것이 없으면 파일은 거의 확실히 잘린 것입니다. 헤더는 앞쪽 1,024바이트 안 어디에서 시작해도 되고 대부분의 뷰어가 이런 파일도 열기 때문에, 알려 주기만 하고 거부하지는 않습니다.{"filename": "invoice.pdf", "mime": "application/pdf", "content": "…"}) data URI를 쓰면 받는 쪽이 추측할 필요가 없습니다.%PDF-로 시작하는지 검증하세요. 잘못된 필드, 이중 인코딩, Base64로 반환된 오류 페이지를 코드 한 줄로 걸러 낼 수 있습니다.multipart/form-data나 미리 서명된 다운로드 URL이 양쪽 모두에 더 가볍습니다.BLOB/bytea 열은 3분의 1 더 작고, VARCHAR처럼 소리 없이 잘리지도 않습니다. Base64 인코딩은 API 경계에서만 하세요.data:application/pdf;base64, 접두사, 따옴표, 줄바꿈, JSON 이스케이프는 그대로 두어도 자동으로 제거됩니다. data: 접두사를 데이터와 함께 디코딩했거나, 바이트를 바이너리가 아닌 텍스트로 저장했거나, 문자열이 잘렸거나(끝에 %%EOF가 없음), Base64가 두 번 인코딩되었거나, 아예 PDF가 아닌 경우(PNG 이미지나 JSON 오류 메시지 등)입니다. 같은 문자열을 여기에 붙여넣으면 각 경우에 맞는 경고가 표시됩니다. JVBERi0는 PDF, iVBORw0KGgo는 PNG, /9j/는 JPEG, R0lGOD는 GIF, UEsDB는 ZIP(따라서 DOCX, XLSX, PPTX도), H4sI는 gzip입니다. 이 도구는 디코딩한 매직 바이트를 읽어 형식을 표시하고, 그에 맞는 확장자로 저장합니다. data:application/pdf;base64,JVBERi0…. 브라우저는 이를 링크나 src로 바로 열 수 있습니다. API는 보통 쉼표 뒤의 Base64 부분만 요구합니다. %PDF-로 시작하지 않기 때문입니다. 표시되는 형식이 그 바이트의 실제 형식입니다. 흔한 경우는 스캔본이 실제로는 PNG나 JPEG인 경우, DOCX인 경우, 여러 PDF를 묶은 ZIP인 경우, 또는 문서 대신 JSON이나 HTML 오류 메시지가 Base64로 인코딩되어 온 경우입니다. %%EOF 표시로 끝납니다. 이것이 없다면 Base64는 거의 확실히 잘린 것입니다. 일부만 복사되었거나, MySQL TEXT(65,535바이트) 같은 데이터베이스 열에서 잘렸거나, 로그 줄 길이 제한으로 짧아진 경우입니다. 전체 문자열을 다시 받아 오세요. 디코딩으로는 빠진 데이터를 되살릴 수 없습니다. 인코딩 & 포매팅
ASCII 128자 전체 코드표. 10진수, 16진수, 8진수, 2진수 대조와 문자↔ASCII 코드 양방향 변환. 제어문자는 이스케이프와 캐럿 표기까지 정리한 온라인 도구.
인코딩 & 포매팅
EAN-13, UPC-A, Code 128 바코드를 온라인에서 무료로 생성해 SVG나 PNG로 내려받으세요. 체크 디지트가 자동으로 채워지고, 틀리면 정답을 알려 드립니다.
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
인코딩 & 포매팅
Base64 문자열이나 데이터 URI를 온라인 브라우저에서 이미지로 디코딩합니다. 미리보고, 치수와 MIME을 읽은 뒤 PNG, JPG, GIF, SVG로 다운로드하세요. 업로드 없음.
인코딩 & 포매팅
브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.
인코딩 & 포매팅
깨진 문자를 붙여넣으면 원문을 되살립니다. UTF-8, EUC-KR, GBK, Big5 조합을 모두 시도하고 왕복 검증을 통과한 경로를 표시합니다. 브라우저 안에서만 처리됩니다.