사용 방법
- uuencode 블록을 만들려면 ‘인코딩’을, 블록에서 데이터를 복원하려면 ‘디코딩’을 선택합니다.
- 결과를 uudecode 명령으로 처리하려면 ‘begin / end 줄’을 켠 상태로 두고 ‘파일 이름’을 입력합니다. 데이터 줄만 필요하면 이 옵션을 끕니다.
- 내용을 입력하거나 붙여넣습니다. 파일의 바이트를 인코딩하려면 ‘파일 열기’를 클릭합니다.
- 디코딩할 때는 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.is | begin 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로 디코딩할 수 없고, 그 반대도 마찬가지입니다.