파일 업로드
  1. base64hub
  2. 기타 진법
  3. Xxencode

Xxencode·Xxdecode 온라인 변환기

텍스트를 입력하면 영문자, 숫자, +, -만 쓰는 uuencode 변형인 xxencode 출력을 받습니다. 방향을 바꾸면 블록을 xxdecode하며, 파일 이름은 begin 줄에서 가져옵니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 안전한 문자 64개 + - 0-9 A-Z a-z 업데이트 2026. 10. 27.
입력 0바이트 0 B출력 0

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

xxencode와 xxdecode 사용 방법

인코딩하려면:

  1. 입력 · 텍스트에 텍스트를 입력하거나 붙여넣으세요. xxencode 블록이 출력 · xxencode에 나타납니다.
  2. 출력 아래의 파일 이름을 받는 사람이 받을 이름으로 설정하세요. 기본값은 data.bin입니다.
  3. 데이터 줄만 원하면 begin/end 줄을 끄세요.

디코딩하려면:

  1. 방향 토글에서 xxencode → 텍스트를 누르세요.
  2. 블록을 붙여넣으세요. 메일 헤더나 메모처럼 begin 줄 앞에 있는 텍스트는 건너뜁니다.
  3. 결과를 읽거나, 바이너리 내용이면 변환 후를 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%T1Eq3o
Hello, world,2&5L;&\L('=O<FQDAG4JgP4wg65RjQalY
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의 백틱 하나짜리 줄과 같은 역할을 합니다.