Jak używać
- Wybierz „Koduj”, aby utworzyć blok uuencode, lub „Dekoduj”, aby odzyskać z niego dane.
- Pozostaw włączoną opcję „Wiersze begin / end” i podaj nazwę w polu „Nazwa pliku”, jeśli wynik ma działać z poleceniem uudecode. Wyłącz tę opcję, aby otrzymać tylko wiersze danych.
- Wpisz lub wklej dane wejściowe albo otwórz plik, aby zakodować jego bajty.
- Przy dekodowaniu wklej cały blok, łącznie z wierszem begin, jeśli występuje, a następnie skopiuj wynik lub pobierz go jako plik.
Czym jest uuencode?
Uuencode (skrót od Unix-to-Unix encode) pochodzi z około 1980 roku, kiedy pliki kopiowano między komputerami z systemem Unix przez łącza UUCP, które przenosiły wyłącznie tekst. Zamienia każde 3 bajty na cztery wartości 6-bitowe i dodaje do każdej z nich 32, co daje drukowalne znaki od spacji do podkreślenia. Ponieważ systemy pocztowe często usuwały spacje na końcu wierszy, wartość zero zapisuje się jako grawis (`) zamiast spacji i tak też robi to narzędzie.
Plik uuencode ma stały układ:
- Wiersz nagłówka
begin 644 name, gdzie 644 to uniksowy tryb pliku zapisany ósemkowo (właściciel może czytać i zapisywać, pozostali tylko czytać), a name to nazwa tworzonego pliku. - Wiersze danych zawierające do 45 bajtów wejściowych. Każdy zaczyna się od znaku długości (32 plus liczba bajtów, więc pełny wiersz zaczyna się od
M), po którym następuje do 60 zakodowanych znaków. - Wiersz z pojedynczym grawisem, oznaczający zero bajtów, a po nim wiersz
end.
Wraz ze znakami długości i znakami końca wiersza wynik jest o ok. 38% większy od danych wejściowych.
Uuencode dzisiaj
Przed pojawieniem się MIME uuencode był typowym sposobem wysyłania programów i obrazów pocztą e-mail oraz publikowania ich w Usenecie. W latach 90. zastąpił go Base64 z MIME: uuencode nie pozwalał określić typu zawartości, istniało kilka niezgodnych wariantów, a niektóre jego znaki interpunkcyjne były zmieniane przez bramy między systemami ASCII i EBCDIC. Właśnie z tego powodu powstał xxencode.
Dane uuencode wciąż można spotkać w archiwach poczty i grup dyskusyjnych, starszych skryptach powłoki i dawnych systemach. W nowych projektach używaj Base64, a w przypadku całych plików narzędzia Plik na Base64.
Uuencode w wierszu poleceń i w Pythonie
# Powłoka (GNU sharutils): plik wejściowy, a potem nazwa dla wiersza begin
uuencode photo.jpg photo.jpg > photo.uu
uudecode photo.uu
# Python: jeden wiersz do 45 bajtów naraz
import binascii
line = binascii.b2a_uu(b'hello', backtick=True)
binascii.a2b_uu(line) # b'hello'
Stary moduł uu został usunięty w Pythonie 3.13, ale funkcje z binascii pozostały.
Specyfikacja
| Alfabet | ASCII od 32 do 96 (od spacji do `) |
|---|---|
| Rozmiar wyniku | Ok. 137% wraz z prefiksami wierszy |
| Dopełnienie | Wiersze do 45 bajtów |
| Standard | POSIX uuencode |
| Rozróżnia wielkość liter | Tak |
Przykłady
| Wejście (UTF-8) | Wyjście |
|---|---|
Hello, World! | begin 644 data.bin
-2&5L;&\L(%=O<FQD(0``
`
end |
Base64.is | begin 644 data.bin
)0F%S938T+FES
`
end |
你好 | begin 644 data.bin
&Y+V@Y:6]
`
end |
Najczęściej zadawane pytania
Dlaczego tekst uuencode zawiera grawisy?
Wartość zero odpowiadałaby spacji, a spacje na końcu wierszy często ginęły podczas przesyłania. Wiele koderów, w tym ten, zapisuje zamiast niej grawis. Dekoder akceptuje oba znaki.
Co oznacza begin 644?
Rozpoczyna zakodowany blok. 644 to uniksowy tryb uprawnień odtworzonego pliku (odczyt i zapis dla właściciela, odczyt dla pozostałych), a słowo po nim to nazwa pliku, który utworzy uudecode. Nazwę można ustawić w polu „Nazwa pliku”.
Czy można zdekodować uuencode bez wiersza begin?
Tak. Jeśli nie ma wiersza begin, każdy wiersz jest dekodowany jako dane. Jeśli jest, dekodowanie zaczyna się po nim i kończy na wierszu end, więc tekst wokół bloku, np. treść e-maila, jest pomijany. Spacje końcowe usunięte przez programy pocztowe są przywracane automatycznie.
Czy uuencode to to samo co Base64?
Nie. Oba zamieniają 3 bajty na 4 znaki, ale uuencode używa innego zakresu znaków, znaku długości w każdym wierszu oraz wierszy begin i end. Wyniku Base64 nie da się zdekodować jako uuencode i odwrotnie.