Uuencode 및 Uudecode

텍스트, 16진수 바이트, 파일을 전통적인 Unix-to-Unix 형식으로 인코딩하거나, 오래된 이메일, 유즈넷 아카이브, 스크립트에 담긴 uuencode 블록을 원래 데이터로 디코딩합니다.

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

사용 방법

  1. uuencode 블록을 만들려면 ‘인코딩’을, 블록에서 데이터를 복원하려면 ‘디코딩’을 선택합니다.
  2. 결과를 uudecode 명령으로 처리하려면 ‘begin / end 줄’을 켠 상태로 두고 ‘파일 이름’을 입력합니다. 데이터 줄만 필요하면 이 옵션을 끕니다.
  3. 내용을 입력하거나 붙여넣습니다. 파일의 바이트를 인코딩하려면 ‘파일 열기’를 클릭합니다.
  4. 디코딩할 때는 begin 줄이 있다면 그 줄까지 포함해 블록 전체를 붙여넣은 다음, 결과를 복사하거나 파일로 다운로드합니다.

uuencode란?

uuencode는 Unix-to-Unix encode의 줄임말로, 텍스트만 전달할 수 있는 UUCP 회선을 통해 유닉스 컴퓨터끼리 파일을 복사하던 1980년 무렵에 등장했습니다. 3바이트를 6비트 값 4개로 나누고 각 값에 32를 더해 공백부터 밑줄까지의 인쇄 가능한 문자로 만듭니다. 메일 시스템이 줄 끝의 공백을 지우는 일이 많았기 때문에 0 값은 공백 대신 백틱(`)으로 표기하며, 이 도구도 그렇게 합니다.

uuencode 파일은 다음과 같은 고정된 구조를 가집니다.

  • 헤더 줄 begin 644 name. 여기서 644는 8진수로 쓴 유닉스 파일 모드(소유자는 읽기와 쓰기, 그 외 사용자는 읽기 가능)이고, name은 생성할 파일의 이름입니다.
  • 입력 바이트를 최대 45개까지 담는 데이터 줄. 각 줄은 길이 문자(32에 바이트 수를 더한 값이므로 꽉 찬 줄은 M으로 시작)로 시작하며, 그 뒤에 인코딩된 문자가 최대 60개 이어집니다.
  • 0바이트를 뜻하는 백틱 하나만 있는 줄과, 그다음의 end 줄.

길이 문자와 줄 바꿈까지 포함하면 출력은 입력보다 약 38% 커집니다.

오늘날의 uuencode

MIME이 등장하기 전에는 프로그램이나 이미지를 이메일로 보내거나 유즈넷에 올릴 때 uuencode를 사용하는 것이 일반적이었습니다. 1990년대에 MIME Base64가 그 자리를 대신했습니다. uuencode에는 콘텐츠 유형을 밝힐 방법이 없었고, 서로 호환되지 않는 여러 변형이 존재했으며, 일부 문장 부호가 ASCII 시스템과 EBCDIC 시스템 사이의 게이트웨이에서 바뀌어 버렸기 때문입니다. xxencode가 만들어진 것도 이 마지막 문제 때문입니다.

지금도 메일과 뉴스 아카이브, 오래된 셸 스크립트, 레거시 시스템에서 uuencode 데이터를 만날 수 있습니다. 새로 작업할 때는 Base64를 사용하고, 파일 전체를 인코딩할 때는 파일 Base64 변환 도구를 이용하십시오.

명령줄과 Python에서 uuencode 사용하기

# 셸(GNU sharutils): 입력 파일, 그다음 begin 줄에 쓸 이름
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu

# Python: 한 번에 최대 45바이트씩 한 줄
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line)          # b'hello'

Python의 오래된 uu 모듈은 Python 3.13에서 제거되었지만 binascii 함수는 계속 사용할 수 있습니다.

사양

알파벳ASCII 32~96(공백~`)
출력 크기약 137%(줄 앞 길이 문자 포함)
패딩줄당 최대 45바이트
표준POSIX uuencode
대소문자 구분예

예시

입력 (UTF-8)출력
Hello, World!begin 644 data.bin -2&5L;&\L(%=O<FQD(0`` ` end
Base64.isbegin 644 data.bin )0F%S938T+FES ` end
你好begin 644 data.bin &Y+V@Y:6] ` end

자주 묻는 질문

uuencode 텍스트에 백틱이 들어 있는 이유는 무엇입니까?

0 값은 원래 공백에 대응하는데, 줄 끝의 공백은 전송 중에 사라지는 일이 많았습니다. 그래서 이 도구를 포함한 많은 인코더가 공백 대신 백틱을 씁니다. 디코더는 두 가지를 모두 받아들입니다.

begin 644는 무슨 뜻입니까?

인코딩된 블록의 시작을 나타냅니다. 644는 복원될 파일의 유닉스 권한 모드(소유자는 읽기와 쓰기, 그 외 사용자는 읽기)이고, 그 뒤의 단어는 uudecode가 생성할 파일 이름입니다. 이름은 옵션의 ‘파일 이름’에서 지정할 수 있습니다.

begin 줄 없이 uuencode를 디코딩할 수 있습니까?

예. begin 줄이 없으면 모든 줄을 데이터로 디코딩합니다. begin 줄이 있으면 그다음 줄부터 디코딩을 시작해 end 줄에서 멈추므로, 이메일 본문처럼 블록 앞뒤에 있는 텍스트는 건너뜁니다. 메일 소프트웨어가 지운 줄 끝 공백은 자동으로 복원됩니다.

uuencode는 Base64와 같습니까?

아니요. 둘 다 3바이트를 4문자로 바꾸지만, uuencode는 다른 문자 범위를 사용하고 각 줄에 길이 문자를 붙이며 begin 줄과 end 줄이 있습니다. Base64 출력은 uuencode로 디코딩할 수 없고, 그 반대도 마찬가지입니다.