„UUencode" – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Versionsgeschichte interaktiv durchsuchen
[gesichtete Version] [gesichtete Version]
← Zum vorherigen Versionsunterschied
Inhalt gelöscht Inhalt hinzugefügt
(39 dazwischenliegende Versionen von 21 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Begriffsklärungshinweis|Für das noch nicht nachgewiesene chemische Element Uue siehe [[Ununennium]].}}

'''UUencode''' war das erste verbreitete Programm, das es ermöglichte, [[Binärdatei]]en (also z. B. Bilder oder Programme) so umzuwandeln, dass sie nur noch aus „druckbaren ASCII-Zeichen" bestehen und dadurch problemlos per [[E-Mail]] verschickt werden konnten, in denen nur [[American Standard Code for Information Interchange|ASCII]]-Zeichen erlaubt sind.
'''UUencode''' war das erste verbreitete Programm, das es ermöglichte, [[Binärdatei]]en (also z. B. Bilder oder Programme) so umzuwandeln, dass sie nur noch aus „druckbaren ASCII-Zeichen" bestehen und dadurch problemlos per [[E-Mail]] verschickt werden konnten, in denen nur [[American Standard Code for Information Interchange|ASCII]]-Zeichen erlaubt sind.


== Geschichte ==
== Geschichte ==
UUencode wurde 1980 von [[Mary Ann Horton]] entwickelt.<ref>[https://www.tuhs.org/cgi-bin/utree.pl?file=4BSD/usr/man/cat1/uuencode.1c tuhs.org]</ref>
Das UU steht für die Wurzeln in [[(削除) UNIX (削除ここまで)]]. Das UU in UUencode und -decode steht ebenso wie das UU bei [[Unix to Unix Copy|UUcp]] für '''U'''NIX to '''U'''NIX ''copy protocol''(削除) . (削除ここまで) (削除) Also (削除ここまで) die Übertragung von einem UNIX-Computer zu einem anderen UNIX-Computer.

Das UU steht für die Wurzeln in [[(追記) Unix (追記ここまで)]]. Das UU in UUencode und -decode steht ebenso wie das UU bei [[Unix to Unix Copy|UUcp]] für '''U'''NIX(追記) <!--sic--> (追記ここまで) to '''U'''NIX(追記) <!--sic--> (追記ここまで) ''copy protocol''(追記) , (追記ここまで) (追記) also (追記ここまで) die Übertragung von einem UNIX-Computer zu einem anderen UNIX-Computer.


Das Prinzip ist dabei ähnlich wie beim heute für E-Mail-Anhänge üblichen [[Base64]]-Verfahren: Drei Bytes der Binärdatei (=24&nbsp;bit) werden auf viermal 6&nbsp;Bit aufgeteilt und den 6-bit-Werten werden druckbare ASCII-Zeichen zugeordnet. Erste Versionen von UUencode benutzten dabei einfach die ASCII-Zeichen mit den Werten 32 bis 95.
Das Prinzip ist dabei ähnlich wie beim heute für E-Mail-Anhänge üblichen [[Base64]]-Verfahren: Drei Bytes der Binärdatei (=24&nbsp;bit) werden auf viermal 6&nbsp;Bit aufgeteilt und den 6-bit-Werten werden druckbare ASCII-Zeichen zugeordnet. Erste Versionen von UUencode benutzten dabei einfach die ASCII-Zeichen mit den Werten 32 bis 95.


Da das ASCII-(削除) Zeichen mit (削除ここまで)Wert 32(削除) aber das Leerzeichen ist, und dieses (削除ここまで) den (削除) Mailversand (削除ここまで) oft nicht heil übersteht, wurde stattdessen das ASCII mit dem Wert 96 ("<code>`</code>") verwendet.
Da das (追記) [[Leerzeichen]] ( (追記ここまで)ASCII-Wert 32(追記) ) (追記ここまで) den (追記) [[E-Mail]]-Versand (追記ここまで) oft nicht heil übersteht, wurde stattdessen das ASCII(追記) -Zeichen (追記ここまで) mit dem Wert 96 ("<code>`</code>") verwendet.


== Dateiformat ==
== Dateiformat ==
Zeile 20: Zeile 20:
: <code>'''end'''</code>
: <code>'''end'''</code>


Als ''modus'' werden dabei die Dateirechte, wie sie unter Unix üblich sind, als 3- oder (削除) 4stellige (削除ここまで) [[Oktalsystem|Oktalzahl]] geschrieben. Der ''Dateiname'' ist der Name der Originaldatei, ohne Verzeichnis.
Als ''modus'' werden dabei die Dateirechte, wie sie unter Unix üblich sind, als 3- oder (追記) 4-stellige (追記ここまで) [[Oktalsystem|Oktalzahl]] geschrieben. Der ''Dateiname'' ist der Name der Originaldatei, ohne Verzeichnis.


Jede Datenzeile beginnt mit einer 1-Byte-Längenangabe, die angibt, wie viele Originalbytes in dieser Zeile kodiert worden sind. Diese Längenangabe ist eine Zahl zwischen 1 und 63 und wird dabei ebenfalls uu-kodiert, also als Zeichen von "<code>!</code>" bis "<code>_</code>".
Jede Datenzeile beginnt mit einer 1-Byte-Längenangabe, die angibt, wie viele Originalbytes in dieser Zeile kodiert worden sind. Diese Längenangabe ist eine Zahl zwischen 1 und 63 und wird dabei ebenfalls uu-kodiert, also als Zeichen von "<code>!</code>" bis "<code>_</code>".
Üblich sind 45 Byte (also der Wert "<code>M</code>") die in 60 Zeichen kodiert werden.
Üblich sind 45 Byte (also der Wert "<code>M</code>") die in 60 Zeichen kodiert werden.

Um das Ende der Datei anzuzeigen, muss stets eine „Leerzeile" kodiert werden,
die nur das Längenbyte 0 (kodiert "<code>`</code>") enthält. Abschließend folgt eine Zeile mit dem Schlüsselwort <code>'''end'''</code>.


== Kodierungsverfahren ==
== Kodierungsverfahren ==


Drei Bytes Quelldaten werden durch uuencode in vier Bytes kodiert. Die Daten liegen in der uuencodierten Datei in den unteren sechs Bits der Bytes, die oberen Bits werden durch die Kodierung gesetzt:
Drei Bytes Quelldaten werden durch (追記) <code> (追記ここまで)uuencode(追記) </code> (追記ここまで) in vier Bytes kodiert. Die Daten liegen in der uuencodierten Datei in den unteren sechs Bits der Bytes, die oberen Bits werden durch die Kodierung gesetzt:


(削除) unkodierter (削除ここまで) (削除) Bitstrom (削除ここまで) (削除) ↔ (削除ここまで) kodierter Bitstrom
(追記) unkodierter (追記ここまで) (追記) Bitstrom (追記ここまで) (追記) ↔ (追記ここまで) kodierter Bitstrom
aaaaaaaa bbbbbbbb cccccccc ↔ 0kaaaaaa 0kaabbbb 0kbbbbcc 0kcccccc
aaaaaaaa bbbbbbbb cccccccc ↔ 0kaaaaaa 0kaabbbb 0kbbbbcc 0kcccccc



Zur Kodierung werden die neuen Sechsergruppen "00eeeeee" zunächst mit 32 [[XOR]]-verknüpft.
Zur Kodierung werden die neuen Sechsergruppen "00eeeeee" zunächst mit 32 [[XOR]]-verknüpft.
Ist das daraus resultierende Ergebnis ≤ 32, so wird das Bit&nbsp;k gesetzt.
Ist das daraus resultierende Ergebnis ≤ 32, so wird das Bit&nbsp;k gesetzt.


uncodiert (XOR 32) (k setzen?) codiert
uncodiert(追記) (追記ここまで) (XOR 32)(追記) (追記ここまで) (k setzen?)(追記) (追記ここまで) codiert
[0] = [00000000] → (削除) [00100000] (削除ここまで) -ja→ [01100000] = [96]
[0] = [00000000](追記) (追記ここまで)(追記) [00100000] (追記ここまで) -ja→(追記) (追記ここまで) [01100000] = [96]
[1,31] = [00000001,00011111] → [00100001,00111111] -nein→ [00100001,00111111] = [33,63]
[1,31] = [00000001,00011111](追記) (追記ここまで) → [00100001,00111111](追記) (追記ここまで) -nein→(追記) (追記ここまで) [00100001,00111111] = [33,63]
[32,63] = [00100000,00111111] → [00000000,00011111] -ja→ [01000000,01011111] = [64,95]
[32,63] = [00100000,00111111](追記) (追記ここまで) → [00000000,00011111](追記) (追記ここまで) -ja→(追記) (追記ここまで) [01000000,01011111] = [64,95]


(削除) Oder (削除ここまで) (削除) einfacher (削除ここまで): Für 0 ist das Ergebnis 96, für alle anderen muss 32 addiert werden.
(追記) Anders (追記ここまで) (追記) ausgedrückt (追記ここまで): Für 0 ist das Ergebnis 96, für alle anderen muss 32 addiert werden.


Die Dekodierung der Daten arbeitet umgekehrt, vier Bytes Quelldaten werden durch <code>uudecode</code> in drei Bytes decodiert.
Um das Ende der Datei anzuzeigen, muss stets eine „Leerzeile" kodiert werden,
Ist in den Quelldaten das Bit&nbsp;k gesetzt, ist dieses zu entfernen.
die nur das Längenbyte 0 (kodiert "<code>`</code>") enthält. Abschließend folgt eine Zeile mit dem Schlüsselwort <code>'''end'''</code>.
Das daraus resultierende Ergebnis wird dann mit 32 [[XOR]]-verknüpft.

codiert (k entfernen) (XOR 32) uncodiert
[96] = [01100000] -ja→ [00100000] → [00000000] = [0]
[33,63] = [00100001,00111111] -nein→ [00100001,00111111] → [00000001,00011111] = [1,31]
[64,95] = [01000000,01011111] -ja→ [00000000,00011111] → [00100000,00111111] = [32,63]

Anders ausgedrückt: Für 96 ist das Ergebnis 0, für alle anderen muss 32 subtrahiert werden.

kodierter Bitstrom ↔ unkodierter Bitstrom
0kaaaaaa 0kaabbbb 0kbbbbcc 0kcccccc ↔ aaaaaaaa bbbbbbbb cccccccc


== Beispiel ==
== Beispiel ==
Ein Textabsatz von oben diene als Eingabe:
Ein Textabsatz von oben diene als Eingabe:
<pre>
(削除) (削除ここまで)Geschichte
Geschichte

(削除) (削除ここまで)Das UU steht für die Wurzeln in UNIX. Das UU in UUencode und -decode steht
(削除) (削除ここまで)ebenso wie das UU bei UUcp für UNIX to UNIX copy protocol. Also die Übertragung
(削除) (削除ここまで)von einem UNIX-Computer zu einem anderen UNIX-Computer.


Das UU steht für die Wurzeln in UNIX. Das UU in UUencode und -decode steht
ebenso wie das UU bei UUcp für UNIX to UNIX copy protocol. Also die Übertragung
von einem UNIX-Computer zu einem anderen UNIX-Computer.
</pre>
Die UUencodierung macht daraus:
Die UUencodierung macht daraus:


<pre>
(削除) (削除ここまで)begin 644 uuencode-Test.txt
begin 644 uuencode-Test.txt
(削除) (削除ここまで)M1V5S8VAI8VAT90T*#0I87,ドル@554@<W1E:'0@9OQR(&1I92!7=7)Z96QN(&EN
M1V5S8VAI8VAT90T*#0I87,ドル@554@<W1E:'0@9OQR(&1I92!7=7)Z96QN(&EN
(削除) (削除ここまで)M(%5.25@N(1ドルA<R!552!I;B!5565N8V]D92!U;F0@+61E8V]D92!S=&5H="`-
M(%5.25@N(1ドルA<R!552!I;B!5565N8V]D92!U;F0@+61E8V]D92!S=&5H="`-
(削除) (削除ここまで)M"F5B96YS;R!W:64@9&%S(%55(&)E:2!556-P(&;\<(削除) nowiki><</nowiki> (削除ここまで)B!53DE8('1O(%5.25@@
M"F5B96YS;R!W:64@9&%S(%55(&)E:2!556-P(&;\<B!53DE8('1O(%5.25@@
(削除) (削除ここまで)M8V]P>2!P<F]T;V-O;"X@06QS;R!D:64@W&)E<G1R86=U;F<@#0IV;VX@96EN
M8V]P>2!P<F]T;V-O;"X@06QS;R!D:64@W&)E<G1R86=U;F<@#0IV;VX@96EN
(削除) (削除ここまで)M96T@54Y)6"U#;VUP=71E<B!Z=2!E:6YE;2!A;F1E<F5N(%5.25@M0V]M<'5T
M96T@54Y)6"U#;VUP=71E<B!Z=2!E:6YE;2!A;F1E<F5N(%5.25@M0V]M<'5T
(削除) (削除ここまで)%97(N#0H`
%97(N#0H`
(削除) (削除ここまで)`
`
(削除) (削除ここまで)end
end
</pre>


== XXencode ==
== XXencode ==
Zeile 71: Zeile 87:
Zusätzlich besteht bei einigen xxencode-Versionen die Möglichkeit, optional eine Liste sämtlicher verwendeter Zeichen mitzuschicken. Wenn diese Liste durch fehlerhafte Zeichensatzumwandlungen ebenfalls modifiziert wird, kann der Empfänger dies erkennen und die Datei trotzdem korrekt dekodieren, solange die Modifizierungen [[Bijektivität|umkehrbar eindeutig]] sind.
Zusätzlich besteht bei einigen xxencode-Versionen die Möglichkeit, optional eine Liste sämtlicher verwendeter Zeichen mitzuschicken. Wenn diese Liste durch fehlerhafte Zeichensatzumwandlungen ebenfalls modifiziert wird, kann der Empfänger dies erkennen und die Datei trotzdem korrekt dekodieren, solange die Modifizierungen [[Bijektivität|umkehrbar eindeutig]] sind.


(削除) : (削除ここまで){| class="wikitable"
{| class="wikitable"
|+ Kodierungstabelle von XXencode
|+ Kodierungstabelle von XXencode
|- class="hintergrundfarbe6"
|- class="hintergrundfarbe6"
! Wert
! Wert
! Zeichen
! Zeichen
|rowspan=17 style="width:1px;background(削除) -color (削除ここまで):#000000;padding:0px;"|
|rowspan=17 style="width:1px;background:#000000;padding:0px;"|
! Wert
! Wert
! Zeichen
! Zeichen
|rowspan=17 style="width:1px;background(削除) -color (削除ここまで):#000000;padding:0px;"|
|rowspan=17 style="width:1px;background:#000000;padding:0px;"|
! Wert
! Wert
! Zeichen
! Zeichen
|rowspan=17 style="width:1px;background(削除) -color (削除ここまで):#000000;padding:0px;"|
|rowspan=17 style="width:1px;background:#000000;padding:0px;"|
! Wert
! Wert
! Zeichen
! Zeichen
Zeile 130: Zeile 146:
* [http://www.fpx.de/fp/Software/UUDeview/ UUDeview] – Ein Open-Source Programm zum Encodieren und Decodieren von Base64, BinHex für Unix/Windows/DOS
* [http://www.fpx.de/fp/Software/UUDeview/ UUDeview] – Ein Open-Source Programm zum Encodieren und Decodieren von Base64, BinHex für Unix/Windows/DOS


== Einzelnachweise ==
{{SORTIERUNG:Uuencode}}
<references />

[[Kategorie:E-Mail]]
[[Kategorie:E-Mail]]
[[Kategorie:Zeichenkodierung]]
[[Kategorie:Zeichenkodierung]]
[[Kategorie:Datenformat]]
[[Kategorie:Datenformat]]
[[Kategorie:Abkürzung(削除) |UUENCODE (削除ここまで)]]
[[Kategorie:Abkürzung]]

<!--[[en:xxencode]]-->

Aktuelle Version vom 10. Februar 2025, 14:43 Uhr

UUencode war das erste verbreitete Programm, das es ermöglichte, Binärdateien (also z. B. Bilder oder Programme) so umzuwandeln, dass sie nur noch aus „druckbaren ASCII-Zeichen" bestehen und dadurch problemlos per E-Mail verschickt werden konnten, in denen nur ASCII-Zeichen erlaubt sind.

UUencode wurde 1980 von Mary Ann Horton entwickelt.[1]

Das UU steht für die Wurzeln in Unix. Das UU in UUencode und -decode steht ebenso wie das UU bei UUcp für UNIX to UNIX copy protocol, also die Übertragung von einem UNIX-Computer zu einem anderen UNIX-Computer.

Das Prinzip ist dabei ähnlich wie beim heute für E-Mail-Anhänge üblichen Base64-Verfahren: Drei Bytes der Binärdatei (=24 bit) werden auf viermal 6 Bit aufgeteilt und den 6-bit-Werten werden druckbare ASCII-Zeichen zugeordnet. Erste Versionen von UUencode benutzten dabei einfach die ASCII-Zeichen mit den Werten 32 bis 95.

Da das Leerzeichen (ASCII-Wert 32) den E-Mail-Versand oft nicht heil übersteht, wurde stattdessen das ASCII-Zeichen mit dem Wert 96 ("`") verwendet.

UUencode benutzt ein spezielles Format für die kodierte Datei:

begin modus  dateiname
länge  daten
länge  daten
...
länge  daten
`
end

Als modus werden dabei die Dateirechte, wie sie unter Unix üblich sind, als 3- oder 4-stellige Oktalzahl geschrieben. Der Dateiname ist der Name der Originaldatei, ohne Verzeichnis.

Jede Datenzeile beginnt mit einer 1-Byte-Längenangabe, die angibt, wie viele Originalbytes in dieser Zeile kodiert worden sind. Diese Längenangabe ist eine Zahl zwischen 1 und 63 und wird dabei ebenfalls uu-kodiert, also als Zeichen von "!" bis "_". Üblich sind 45 Byte (also der Wert "M") die in 60 Zeichen kodiert werden.

Um das Ende der Datei anzuzeigen, muss stets eine „Leerzeile" kodiert werden, die nur das Längenbyte 0 (kodiert "`") enthält. Abschließend folgt eine Zeile mit dem Schlüsselwort end.

Kodierungsverfahren

[Bearbeiten | Quelltext bearbeiten ]

Drei Bytes Quelldaten werden durch uuencode in vier Bytes kodiert. Die Daten liegen in der uuencodierten Datei in den unteren sechs Bits der Bytes, die oberen Bits werden durch die Kodierung gesetzt:

 unkodierter Bitstrom ↔ kodierter Bitstrom
aaaaaaaa bbbbbbbb cccccccc ↔ 0kaaaaaa 0kaabbbb 0kbbbbcc 0kcccccc

Zur Kodierung werden die neuen Sechsergruppen "00eeeeee" zunächst mit 32 XOR-verknüpft. Ist das daraus resultierende Ergebnis ≤ 32, so wird das Bit k gesetzt.

uncodiert (XOR 32) (k setzen?) codiert
[0] = [00000000] → [00100000] -ja→ [01100000] = [96]
[1,31] = [00000001,00011111] → [00100001,00111111] -nein→ [00100001,00111111] = [33,63]
[32,63] = [00100000,00111111] → [00000000,00011111] -ja→ [01000000,01011111] = [64,95]

Anders ausgedrückt: Für 0 ist das Ergebnis 96, für alle anderen muss 32 addiert werden.

Die Dekodierung der Daten arbeitet umgekehrt, vier Bytes Quelldaten werden durch uudecode in drei Bytes decodiert. Ist in den Quelldaten das Bit k gesetzt, ist dieses zu entfernen. Das daraus resultierende Ergebnis wird dann mit 32 XOR-verknüpft.

codiert (k entfernen) (XOR 32) uncodiert
[96] = [01100000] -ja→ [00100000] → [00000000] = [0]
[33,63] = [00100001,00111111] -nein→ [00100001,00111111] → [00000001,00011111] = [1,31]
[64,95] = [01000000,01011111] -ja→ [00000000,00011111] → [00100000,00111111] = [32,63]

Anders ausgedrückt: Für 96 ist das Ergebnis 0, für alle anderen muss 32 subtrahiert werden.

 kodierter Bitstrom ↔ unkodierter Bitstrom
0kaaaaaa 0kaabbbb 0kbbbbcc 0kcccccc ↔ aaaaaaaa bbbbbbbb cccccccc

Ein Textabsatz von oben diene als Eingabe:

Geschichte
Das UU steht für die Wurzeln in UNIX. Das UU in UUencode und -decode steht
ebenso wie das UU bei UUcp für UNIX to UNIX copy protocol. Also die Übertragung
von einem UNIX-Computer zu einem anderen UNIX-Computer.

Die UUencodierung macht daraus:

begin 644 uuencode-Test.txt
M1V5S8VAI8VAT90T*#0I87,ドル@554@<W1E:'0@9OQR(&1I92!7=7)Z96QN(&EN
M(%5.25@N(1ドルA<R!552!I;B!5565N8V]D92!U;F0@+61E8V]D92!S=&5H="`-
M"F5B96YS;R!W:64@9&%S(%55(&)E:2!556-P(&;\<B!53DE8('1O(%5.25@@
M8V]P>2!P<F]T;V-O;"X@06QS;R!D:64@W&)E<G1R86=U;F<@#0IV;VX@96EN
M96T@54Y)6"U#;VUP=71E<B!Z=2!E:6YE;2!A;F1E<F5N(%5.25@M0V]M<'5T
%97(N#0H`
`
end

XXencode arbeitet genauso wie UUencode, verwendet aber ausschließlich Buchstaben und Ziffern und die beiden Sonderzeichen Plus (+) und Minus (-). Dies soll das Risiko, dass einige Zeichen in der Textdatei durch automatische Zeichensatzumwandlungen (z. B. von ASCII nach EBCDIC) während der Übertragung irreparabel beschädigt werden, minimieren.

Zusätzlich besteht bei einigen xxencode-Versionen die Möglichkeit, optional eine Liste sämtlicher verwendeter Zeichen mitzuschicken. Wenn diese Liste durch fehlerhafte Zeichensatzumwandlungen ebenfalls modifiziert wird, kann der Empfänger dies erkennen und die Datei trotzdem korrekt dekodieren, solange die Modifizierungen umkehrbar eindeutig sind.

Kodierungstabelle von XXencode
Wert Zeichen Wert Zeichen Wert Zeichen Wert Zeichen
0 + 16 E 32 U 48 k
1 - 17 F 33 V 49 l
2 0 18 G 34 W 50 m
3 1 19 H 35 X 51 n
4 2 20 I 36 Y 52 o
5 3 21 J 37 Z 53 p
6 4 22 K 38 a 54 q
7 5 23 L 39 b 55 r
8 6 24 M 40 c 56 s
9 7 25 N 41 d 57 t
10 8 26 O 42 e 58 u
11 9 27 P 43 f 59 v
12 A 28 Q 44 g 60 w
13 B 29 R 45 h 61 x
14 C 30 S 46 i 62 y
15 D 31 T 47 j 63 z

Verwandte Themen

[Bearbeiten | Quelltext bearbeiten ]
  • 7plus – im Amateurfunk eingesetztes effizienteres und zudem fehlersicheres Kodierungsverfahren
  • Kermit – Protokoll, das Binärzeichen ebenfalls auf ASCII-Zeichen abbildet.
  • Base64 – Kodierung nach MIME, das in E-Mails verwendet wird, um Binärdateien zu übertragen.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten ]
  1. tuhs.org
Abgerufen von „https://de.wikipedia.org/w/index.php?title=UUencode&oldid=253192325"