xxencode와 xxdecode 사용 방법
인코딩하려면:
- 입력 · 텍스트에 텍스트를 입력하거나 붙여넣으세요. xxencode 블록이 출력 · xxencode에 나타납니다.
- 출력 아래의 파일 이름을 받는 사람이 받을 이름으로 설정하세요. 기본값은
data.bin입니다. - 데이터 줄만 원하면 begin/end 줄을 끄세요.
디코딩하려면:
- 방향 토글에서 xxencode → 텍스트를 누르세요.
- 블록을 붙여넣으세요. 메일 헤더나 메모처럼
begin줄 앞에 있는 텍스트는 건너뜁니다. - 결과를 읽거나, 바이너리 내용이면 변환 후를 Hex로 설정하거나, 바이트 저장을 눌러
begin줄의 이름으로 다운로드하세요.
xxencode가 생긴 이유
uuencode의 알파벳은 공백(또는 백틱)부터 _까지의 모든 문자로, [, ], ^, \, !가 들어 있습니다. 이 문자들은 IBM 메인프레임과 BITNET 네트워크 등 ASCII와 EBCDIC 시스템 사이의 메일 게이트웨이에서 문제를 일으켰습니다. EBCDIC에 하나로 정해진 대응 문자가 없었기 때문입니다. 파일은 문자가 뒤바뀐 채 도착했고 디코딩하면 엉터리가 되었습니다.
xxencode는 uuencode의 구조를 유지하고, 알파벳을 확실하게 변환되는 64개 문자 +, -, 0–9, A–Z, a–z로 바꿨습니다. 값 0은 +, 값 1은 -이고, 숫자는 값 2부터 시작하며, 소문자 z가 63입니다.
uuencode와 xxencode 나란히 보기
같은 입력을 파일 이름 hello.txt로 두 형식에 넣으면 다음과 같습니다.
| 입력 | uuencode 데이터 줄 | xxencode 데이터 줄 |
|---|---|---|
Cat | #0V%T | 1Eq3o |
Hello, world | ,2&5L;&\L('=O<FQD | AG4JgP4wg65RjQalY |
| 0 바이트 4개 | $```````` | 2++++++++ |
각 줄의 첫 문자는 그 형식의 알파벳으로 쓴 바이트 수입니다. 3은 uuencode에서 #, xxencode에서 1이고, 12는 ,와 A, 4는 $와 2입니다. 45바이트로 꽉 찬 줄은 uuencode에서 M, xxencode에서 h로 시작합니다.
xxencode 파일 전체는 이렇게 생겼습니다. 여기서는 The quick brown fox jumps over the lazy dog. 0123456789를 fox.txt로 저장했습니다.
begin 644 fox.txt
hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNmsU
8A12mAnEpBXQsCE++
+
end
크기는 uuencode와 같습니다. 3바이트마다 4문자에 줄마다 길이 문자와 줄 바꿈이 붙으므로 입력보다 약 38% 큽니다.
Python에서 xxencode
Python에는 xxencode가 없지만 binascii.b2a_uu가 같은 6비트 값을 만들므로, 그 출력을 uuencode 알파벳에서 xxencode 알파벳으로 바꾸면 길이 문자까지 포함해 올바른 xxencode 줄이 됩니다.
import binascii
UU = "`" + "".join(chr(c) for c in range(33, 96))
XX = "+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
TO_XX = str.maketrans(UU, XX)
def xxencode_line(chunk: bytes) -> str:
return binascii.b2a_uu(chunk, backtick=True).decode().translate(TO_XX)
xxencode_line(b"Cat") # '1Eq3o\n'
45바이트씩 넣은 다음, 맨 위에 begin 644 name을, 맨 아래에 +와 end를 붙이세요. 디코딩은 str.maketrans(XX, UU)로 변환한 뒤 줄마다 binascii.a2b_uu를 호출하면 됩니다. 바이트와 인코딩은 Python 페이지에서 더 다룹니다.
자주 생기는 문제
- xxencode라고 들은 파일이 엉터리로 나옵니다. 꽉 찬 줄의 첫 문자를 확인하세요.
M이면 uuencode 파일이니 uuencode 도구를 쓰세요. - 줄이 잘못된 길이로 디코딩됩니다. 길이 문자가 바뀌었거나 사라졌습니다. 줄을 다시 나눈 메일 클라이언트 때문인 경우가 많습니다. xxencode는 나뉘거나 합쳐진 줄을 복구할 수 없습니다.
- 디코딩한 파일이 짧게 잘립니다. 블록이 여러 부분으로 나뉘어 게시되었습니다.
begin하나와end하나만 남기고 순서대로 이어 붙인 뒤 디코딩하세요.
자주 묻는 질문
xxencode와 uuencode는 무엇이 다른가요?
알파벳만 다릅니다. 둘 다 3바이트를 4문자로 쓰고, 한 줄에 최대 45바이트와 길이 문자를 담으며, begin과 end로 감쌉니다. uuencode는 백틱과 !부터 _까지의 ASCII 범위를 쓰고, xxencode는 +, -, 숫자, 영문자를 씁니다.
파일이 xxencode인지 uuencode인지 어떻게 구별하나요?
꽉 찬 데이터 줄의 첫 문자를 보세요. 둘 다 45바이트를 뜻하는 문자인데, M이면 uuencode, h면 xxencode입니다. `, #, % 같은 문장 부호로 가득한 줄은 uuencode입니다.
xxencode 파일은 어떤 프로그램으로 디코딩하나요?
UUDeview가 두 형식을 모두 처리합니다. Debian과 Ubuntu에서는 uudeview 패키지입니다. GNU sharutils의 uudecode는 uuencode와 Base64는 읽지만 xxencode는 읽지 못합니다.
xxencode 파일이 + 줄로 끝나는 이유는 무엇인가요?
+는 xxencode에서 0을 뜻하는 문자이므로, +만 있는 줄은 길이 0인 데이터 줄입니다. end 바로 앞에서 uuencode의 백틱 하나짜리 줄과 같은 역할을 합니다.