Base91 인코더 및 디코더

텍스트, 16진수 바이트, 파일을 basE91로 변환하고 다시 되돌립니다. basE91은 바이너리 데이터를 인쇄 가능한 ASCII 문자 91개에 담아 Base64나 Base85보다 짧은 출력을 만듭니다.

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 텍스트나 바이트를 basE91로 바꾸려면 ‘인코딩’을, basE91을 원래 데이터로 되돌리려면 ‘디코딩’을 선택합니다.
  2. 내용을 입력하거나 붙여넣거나, ‘파일 열기’로 파일을 불러옵니다. 원시 바이트라면 ‘입력 형식’을 ‘16진수’로 바꿉니다.
  3. 결과는 입력하는 즉시 갱신됩니다. 디코딩할 때는 ‘출력 형식’을 ‘텍스트’ 또는 ‘16진수’로 선택합니다.
  4. 결과를 복사하거나 파일로 다운로드합니다.

basE91이란?

basE91은 Joachim Henke가 설계한 바이너리-텍스트 인코딩입니다. 인쇄 가능한 ASCII 문자 95개 중에서 공백, 작은따옴표 ', 하이픈 -, 백슬래시 \를 제외한 91개를 사용합니다.

basE91은 고정된 바이트 블록 단위로 동작하지 않습니다. 인코더는 입력 비트를 버퍼에 모아 한 번에 13비트씩 꺼냅니다. 13비트 값이 88보다 크면 그대로 두 문자로 표기합니다. 88 이하이면 14번째 비트를 하나 더 가져오는데, 91진수 두 자리로 91 × 91 = 8281가지 값을 표현할 수 있으므로 이 경우에도 두 문자에 들어갑니다. 따라서 13비트 또는 14비트가 항상 정확히 2문자가 됩니다.

그 결과 오버헤드는 최대 약 23%이며, 0 바이트가 길게 이어지는 데이터에서는 약 14%까지 줄어듭니다. 무작위 데이터나 압축된 데이터는 상한에 가까운 결과가 나옵니다.

다른 인코딩과의 비교

인코딩문자 수출력 크기
16진수16입력의 2배
Base5858입력의 약 1.37배
Base6464입력의 1.33배
Base85 / Ascii8585입력의 1.25배
basE9191입력의 약 1.14~1.23배

실제 데이터로 출력 길이를 비교하려면 모든 인코딩 도구에 데이터를 입력해 보십시오.

알아 두어야 할 점

  • 이스케이프. 알파벳에는 JSON과 대부분의 문자열 리터럴에서 이스케이프해야 하는 큰따옴표 "와, HTML과 XML에서 이스케이프해야 하는 <, >, &가 포함되어 있습니다. basE91은 URL에 안전하지 않습니다.
  • 문자열 전체를 디코딩해야 합니다. 비트가 문자 경계를 넘나들기 때문에 basE91 문자열 중간에서 잘라 낸 일부는 단독으로 디코딩할 수 없습니다.
  • 지원 현황. basE91은 IETF 표준이 아닙니다. 저자가 C를 비롯한 여러 언어로 참조 구현을 공개하고 있으며, Python용 base91 패키지처럼 대부분의 플랫폼에 포팅된 구현이 있습니다.

사양

알파벳인쇄 가능한 ASCII 문자 91개
출력 크기약 123%
패딩없음
표준basE91(Joachim Henke)
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!>OwJh>}AQ;r@@Y?F
Base64.isxD7gXm^?t#5
你好I_5k7aPE

자주 묻는 질문

basE91은 Base64보다 작습니까?

예. Base64는 항상 33%가 늘어나지만 basE91은 최대 약 23%만 늘어나며, 0 바이트가 많은 데이터에서는 더 적게 늘어납니다. 1MB 파일이라면 대략 100KB를 절약할 수 있습니다.

basE91은 어떤 문자를 사용합니까?
영문자 A-Z와 a-z, 숫자 0-9, 그리고 기호 !#$%&()*+,./:;<=>?@[]^_`{|}~"를 사용합니다. 공백, 작은따옴표, 하이픈, 백슬래시는 사용하지 않습니다.
이름을 basE91로 표기하는 이유는 무엇입니까?

저자가 이름을 그렇게 표기하기 때문입니다. basE91과 Base91은 같은 인코딩을 가리키며, 이 페이지는 원래 알고리즘을 따릅니다.

공백 문자가 있으면 디코딩이 실패합니까?

아니요. 공백과 줄 바꿈은 알파벳에 포함되지 않으므로 이 페이지의 디코더는 이를 무시합니다. 줄이 나뉜 basE91 텍스트도 그대로 붙여넣을 수 있습니다.