So kodieren und dekodieren Sie xxencode
Zum Kodieren:
- Tippen oder fügen Sie Text in Eingabe · Text ein. Der xxencode-Block erscheint in Ausgabe · xxencode.
- Stellen Sie unter der Ausgabe den Dateinamen auf den Namen, den der Empfänger bekommen soll; voreingestellt ist
data.bin. - Deaktivieren Sie begin/end-Zeilen, wenn Sie nur die Datenzeilen wollen.
Zum Dekodieren:
- Klicken Sie im Richtungsumschalter auf xxencode → Text.
- Fügen Sie den Block ein. Text vor der
begin-Zeile, etwa ein Mail-Header oder eine Notiz, wird übersprungen. - Lesen Sie das Ergebnis, stellen Sie Nach bei binärem Inhalt auf Hex, oder klicken Sie auf Bytes speichern, um es unter dem Namen aus der
begin-Zeile herunterzuladen.
Warum es xxencode gibt
Das Alphabet von uuencode umfasst jedes Zeichen vom Leerzeichen (oder Backtick) bis _, darunter [, ], ^, \ und !. Diese Zeichen machten Ärger auf Mail-Gateways zwischen ASCII- und EBCDIC-Systemen, darunter IBM-Mainframes und das BITNET, weil es für sie kein eindeutiges EBCDIC-Gegenstück gab. Dateien kamen mit vertauschten Zeichen an und dekodierten zu Datenmüll.
Xxencode behält den Aufbau von uuencode und tauscht das Alphabet gegen 64 Zeichen, die sich zuverlässig umwandeln lassen: +, -, 0–9, A–Z und a–z. Der Wert 0 ist +, der Wert 1 ist -, die Ziffern beginnen beim Wert 2, und das kleine z ist 63.
Uuencode und xxencode im Vergleich
Dieselben Eingaben in beiden Formaten, mit dem Dateinamen hello.txt:
| Eingabe | Datenzeile uuencode | Datenzeile xxencode |
|---|---|---|
Cat | #0V%T | 1Eq3o |
Hello, world | ,2&5L;&\L('=O<FQD | AG4JgP4wg65RjQalY |
| 4 Null-Bytes | $```````` | 2++++++++ |
Das erste Zeichen jeder Zeile ist die Byte-Anzahl im Alphabet des jeweiligen Formats: 3 ist # in uuencode und 1 in xxencode, 12 ist , bzw. A, 4 ist $ bzw. 2. Eine volle Zeile mit 45 Bytes beginnt in uuencode mit M und in xxencode mit h.
Eine ganze xxencodierte Datei sieht so aus, hier für The quick brown fox jumps over the lazy dog. 0123456789, gespeichert als fox.txt:
begin 644 fox.txt
hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNmsU
8A12mAnEpBXQsCE++
+
end
Die Größe ist dieselbe wie bei uuencode: 4 Zeichen pro 3 Bytes plus ein Längenzeichen und ein Zeilenumbruch pro Zeile, etwa 38 % größer als die Eingabe.
Xxencode in Python
Python hat kein xxencode, aber binascii.b2a_uu erzeugt dieselben 6-Bit-Werte. Übersetzt man seine Ausgabe vom uuencode-Alphabet ins xxencode-Alphabet, erhält man korrekte xxencode-Zeilen, einschließlich Längenzeichen:
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'
Füttern Sie die Funktion mit jeweils 45 Bytes und ergänzen Sie dann oben begin 644 name und unten + und end. Zum Dekodieren übersetzen Sie mit str.maketrans(XX, UU) und rufen binascii.a2b_uu für jede Zeile auf. Mehr zu Bytes und Kodierungen auf der Python-Seite.
Häufige Probleme
- Datenmüll aus einer Datei, die angeblich xxencodiert ist. Prüfen Sie das erste Zeichen der vollen Zeilen. Ist es
M, ist die Datei uuencodiert; nehmen Sie das uuencode-Tool. - Eine Zeile dekodiert zur falschen Länge. Das Längenzeichen wurde verändert oder ging verloren, oft durch ein Mailprogramm, das Zeilen neu umbrochen hat. Xxencode kann eine geteilte oder zusammengefügte Zeile nicht wiederherstellen.
- Die dekodierte Datei ist zu kurz. Der Block wurde in mehreren Teilen veröffentlicht. Fügen Sie sie in der richtigen Reihenfolge zusammen, mit genau einem
beginund einemend, und dekodieren Sie das Ergebnis.
Häufige Fragen
Was ist der Unterschied zwischen xxencode und uuencode?
Nur das Alphabet. Beide schreiben 3 Bytes als 4 Zeichen in Zeilen von bis zu 45 Bytes mit einem Längenzeichen, eingerahmt von begin und end. Uuencode verwendet den ASCII-Bereich von Backtick und ! bis _; xxencode verwendet +, -, Ziffern und Buchstaben.
Woran erkenne ich, ob eine Datei xxencodiert oder uuencodiert ist?
Sehen Sie sich das erste Zeichen der vollen Datenzeilen an: M bedeutet uuencode und h bedeutet xxencode, denn beide stehen für 45 Bytes. Zeilen voller Satzzeichen wie `, # oder % sind uuencode.
Welches Programm dekodiert xxencodierte Dateien?
UUDeview beherrscht beide Formate; unter Debian und Ubuntu ist es das Paket uudeview. Das uudecode aus GNU sharutils liest uuencode und Base64, aber kein xxencode.
Warum endet eine xxencodierte Datei mit einer +-Zeile?
+ ist das xxencode-Zeichen für 0, eine Zeile, die nur + enthält, ist also eine Datenzeile der Länge null. Sie spielt dieselbe Rolle wie die einzelne Backtick-Zeile bei uuencode, direkt vor end.