uuencode와 uudecode 사용 방법
인코딩하려면:
- 입력 · 텍스트에 텍스트를 입력하거나 붙여넣으세요. uuencode 블록이 출력 · uuencode에 나타납니다.
- 출력 아래의 파일 이름을 설정하세요.
begin줄에 들어갑니다. 기본값은data.bin입니다. - 인코딩된 줄만 필요하다면(예: 다른 형식에 넣을 때) begin/end 줄을 끄세요.
디코딩하려면:
- 방향 토글에서 uuencode → 텍스트를 누르세요.
- uuencode 데이터를 붙여넣으세요. 주변의 메일이나 뉴스 본문이 섞여 있어도 됩니다.
begin줄 앞의 내용은 모두 건너뜁니다. - 출력에서 텍스트를 읽거나, 바이트 저장을 눌러
begin줄의 이름으로 디코딩한 파일을 다운로드하세요. 바이너리 내용이라면 먼저 변환 후를 Hex로 설정해 살펴보세요.
uuencode 파일의 구조
텍스트 Cat을 파일 이름 hello.txt로 인코딩하면 다음과 같습니다.
begin 644 hello.txt
#0V%T
`
end
begin 644 hello.txt는 Unix 권한과 파일 이름을 알려 줍니다.- 각 데이터 줄은 길이 문자로 시작합니다. 그 줄의 바이트 수에 32를 더한 값입니다.
#는 35이므로 이 줄에는 3바이트가 있습니다. 꽉 찬 줄은 45바이트를 담고M으로 시작하며 그 뒤에 60자가 옵니다. - 데이터 문자는 Base64와 거의 같은 방식으로 동작합니다. 3바이트마다 6비트 값 네 개가 되고, 각 값 v는 코드가 v + 32인 문자로 씁니다. 값 0은 공백 대신 백틱으로 씁니다.
- 백틱 하나만 있는 줄은 길이 0인 빈 줄이고,
end가 블록을 닫습니다.
입력이 더 길면 꽉 찬 줄의 구조가 보입니다.
begin 644 fox.txt
M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9RX@
*,#$R,S0U-C<X.0``
`
end
이것은 The quick brown fox jumps over the lazy dog. 0123456789입니다. M 줄에 45바이트, * 줄에 10바이트(42 − 32 = 10)가 있습니다. 줄마다 길이 문자와 줄 바꿈이 붙으므로 uuencode 데이터는 입력보다 약 38% 커서 Base64보다 조금 더 큽니다.
uuencode를 아직 만나는 곳
uuencode는 UUCP(Unix-to-Unix Copy)에서 나왔고, MIME 이전에 이메일과 Usenet으로 바이너리 파일을 보내는 표준 방식이었습니다. 지금은 오래된 메일 아카이브, Usenet 게시물, 일부 임베디드와 메인프레임 파일 전송, 파일을 mail로 파이프하는 스크립트에서 볼 수 있습니다.
백틱 규칙도 그 시절에 생겼습니다. 일부 게이트웨이가 줄 끝 공백을 지워서 0을 공백으로 인코딩한 데이터가 망가졌는데, 백틱은 살아남습니다. 이 인코더는 백틱을 쓰고, 디코더는 둘 다 받아들입니다.
명령줄과 Python에서 uuencode
GNU sharutils를 설치했다면:
uuencode hello.txt hello.txt > hello.uu
uudecode hello.uu
첫 번째 인수는 입력 파일이고 두 번째 인수는 begin 줄에 쓸 이름입니다. uudecode는 현재 디렉터리에 그 이름으로 파일을 만듭니다. Base64 출력을 원하면 uuencode에 -m을 붙이세요.
Python의 binascii는 한 번에 최대 45바이트의 한 줄을 인코딩합니다.
import binascii
binascii.b2a_uu(b"Cat", backtick=True) # b'#0V%T\n'
binascii.a2b_uu(b"#0V%T") # b'Cat'
begin 644 name 줄, 닫는 백틱 줄, end는 직접 붙이세요. 더 많은 인코딩 예시는 Python 페이지에 있습니다.
자주 생기는 문제
- 위치 1에서 오류가 납니다.
begin줄이 없고 텍스트가 uuencode 줄만으로 되어 있지도 않습니다. 블록 전체를 복사했는지 확인하세요. begin-base64블록이 알 수 없는 출력으로 나옵니다. 그 블록은uuencode -m이 만든 것으로 Base64입니다.begin-base64와====사이의 줄을 Base64 디코더에 복사하세요.- 파일이 잘렸거나 줄 끝 근처의 바이트가 틀립니다. 메일 클라이언트가 줄을 다시 나누었거나 줄 끝 공백을 지웠습니다. 모든 데이터 줄이 온전해야 하므로 원래 첨부 파일이나 메시지 원본을 구해 보세요.
- 여러 부분으로 된 게시물이 일부만 디코딩됩니다. 큰 파일은 여러 메시지로 나뉘어 올라오는 경우가 많았습니다. 디코딩하기 전에
begin하나와end하나만 남기고 순서대로 이어 붙이세요.
자주 묻는 질문
uuencode: command not found는 어떻게 해결하나요?
대부분의 Linux 시스템에는 이 명령이 기본으로 설치되어 있지 않습니다. Debian과 Ubuntu에서는 sudo apt install sharutils로 uuencode와 uudecode를 설치하세요. Fedora에도 sharutils 패키지가 있습니다.
begin 644는 무슨 뜻인가요?
644는 디코딩한 파일에 줄 Unix 파일 모드(소유자 읽기/쓰기, 나머지 읽기)이고, 그 뒤의 단어는 파일 이름입니다. uudecode는 그 이름으로 파일을 만들고, 이 페이지는 바이트 저장에 그 이름을 씁니다.
uuencode는 Base64와 같은 것인가요?
둘 다 3바이트를 4문자로 바꾸지만, uuencode는 공백부터 밑줄까지의 ASCII 범위를 쓰고 줄마다 길이 문자를 붙입니다. Base64는 알파벳이 다르고 MIME 이메일이 쓰는 방식입니다. uuencode -m은 begin-base64 블록 안에 Base64를 씁니다.
Python으로 아직 uuencode 파일을 디코딩할 수 있나요?
네, binascii.a2b_uu로 한 줄씩 디코딩할 수 있습니다. 상위 수준의 uu 모듈은 Python 3.11에서 지원 중단되었고 3.13에서 제거되었습니다.