Base85
Base85 (inne nazwy Ascii85, Z85) – rodzaj kodowania transportowego umożliwiającego przekazywanie binarnych danych w środowisku, w którym dopuszczalne jest używanie jedynie znaków ASCIISzablon:Odn.
Opis działania
Strumień danych dzielony jest na bloki podlegające transformacji. W dziedzinie danych binarnych rozmiar bloku to cztery bajty Po stronie ASCII odpowiada im pięć znaków Oba zestawy łączy następująca relacjaSzablon:Odn:
Proces konwersji wykorzystuje pozycyjny system liczbowy o podstawie do reprezentacji liczb zapisanych na 32 bitachSzablon:Odn. Liczby trzydziestodwubitowe można traktować jak czterocyfrowe w systemie o podstawie Szablon:Odn.
Proces translacji z dziedziny binarnej jest jednoznaczny dzięki relacjiSzablon:Odn:
ASCII zawiera 95 znaków drukowalnych (wliczając w to odstęp). Do reprezentacji cyfr wykorzystuje się z niego podzbiór 85 znakówSzablon:Odn.
Podstawowa funkcja konwertująca wymaga na wejściu liczb trzydziestodwubitowych. Oznacza to, że strumień danych binarnych powinien mieć całkowitą liczbę bajtów podzielną przez cztery. Sposób obsługi przypadków nie spełniających tego warunku zależy od implementacji. Jednym z rozwiązań jest dodanie brakujących bajtów o wartości zero do ostatniego blokuSzablon:Odn i skrócenie wyniku o tyle cyfr ile bajtów zostało dodanychSzablon:Odn[uwaga 2].
Własności
- Rozmiar danych binarnych do zakodowanych pozostaje w stosunku Szablon:Odn, czyli kodowanie zwiększa objętość o 25%Szablon:Odn. Daje to przewagę nad alternatywnym kodowaniem 7-bitowym. Na przykład base16 zwiększa rozmiar w stosunku Szablon:Odn, natomiast base64 zamienia 24 bity na 4 znakiSzablon:Odn (stosunek czyli wzrost objętości o 33%).
- Podstawa o wartości jest wielkością minimalną aby umożliwić prezentację każdej liczby trzydziestodwubitowej za pomocą pięciu cyfr[uwaga 3]. Możliwe jest użycie wszystkich 94 znaków ASCII, nie zmienia to jednak minimalnej liczby cyfr potrzebnej do zakodowania informacjiSzablon:Odn. Stosowanie minimalnej bazy pozwala na użycie pozostałych znaków do innych celówSzablon:Odn.
- Algorytmu nie można poddać optymalizacji polegającej na zdefiniowaniu predefiniowanych tablic mapujących wybrane grupy bitów na odpowiadające im znaki, co jest na przykład osiągalne dla base64Szablon:Odn.
Warianty
Różnice między istniejącymi wariantami polegają głównie na odpowiednim skojarzeniu znaków z wartościami cyfr w systemie o podstawie
btoa
Program Szablon:Tt w systemie Unix przydziela cyfrom kolejne kody ASCII począwszy od znaku Szablon:Tt dla cyfry o wartości i kończywszy na znaku Szablon:Tt dla cyfry o wartości Szablon:Odn. Znak Szablon:Tt oznacza koniec zakodowanych danych, Szablon:Tt jest skrótem oznaczającym cztery bajty o wartości zeroSzablon:Odn. Nowsza wersja programu dodała również znak Szablon:Tt, który oznacza cztery bajty o wartości 32 (cztery spacje)Szablon:Odn.
PostScript
Implementacja Adobe Inc. na potrzeby języka PostScript wykorzystuje zestaw znaków od Szablon:Tt do Szablon:Tt dla cyfr od do oraz stosuje skrót Szablon:Tt na oznaczenie czterech bajtów o wartości zero. Symbolem końca danych jest sekwencja Szablon:TtSzablon:Odn. Kodowanie to jest określane nazwą ASCII85Szablon:Odn.
Z85
Standard umożliwiający łatwe użycie kodowania bezpośrednio w kodzie źródłowym stosuje następującą kolejność znaków Szablon:Tt–Szablon:Tt, Szablon:Tt–Szablon:Tt, Szablon:Tt–Szablon:Tt, Szablon:TtSzablon:Odn. Można go używać w pojedynczych lub podwójnych cudzysłowach oraz przekazywać w linii poleceń. Umieszczenie znaku Szablon:Tt jako reprezentacji cyfry 0 ułatwia naoczne wyszukiwanie zer binarnychSzablon:Odn.
RFC 1924
Primaaprilisowa specyfikacja z propozycją zwartego zapisu adresów w sieci IPv6 zaleca następującą kolejność znaków dla cyfr o podstawie : Szablon:Tt–Szablon:Tt, Szablon:Tt–Szablon:Tt, Szablon:Tt–Szablon:Tt, Szablon:TtSzablon:Odn.
Wykluczenie Szablon:Tt i Szablon:Tt upraszcza cytowanie, a brak Szablon:Tt i Szablon:Tt umożliwia tworzenie list i zapis w zdaniu. Znaki Szablon:Tt mają już zarezerwowane znaczenie w CIDR i IPv6 stąd również nie są używane w kodowaniu. Natomiast znak Szablon:Tt mógłby powodować problemy w niektórych środowiskach, gdyż jest często używany do podawania sekwencji specjalnychSzablon:Odn.
Dodatkową różnicą względem pozostałych wariantów jest brak dzielenia danych na czterobajtowe bloki. Specyfikacja omawia kodowanie w konteście adresów IPv6, które mają rozmiar 128 bitów i traktowane są w całości jako liczby całkowite w celu przekształcenia ich na zakodowaną 20 znakową postaćSzablon:Odn. W ogólnym przypadku taki zapis adresu jest znacząco krótszy niż format standardowy lub skompresowanySzablon:Odn.
Zestaw znaków z tej specyfikacji używany jest przez system kontroli wersji git do generowania łat z danych binarnych[1][2].
XML
Nie ma oficjalnego standardu dla efektywnego kodowania w dokumentach XML. Paul Kwiatkowski zaproponował następujący zestaw: Szablon:Tt–Szablon:Tt, Szablon:Tt–Szablon:Tt, Szablon:Tt–Szablon:Tt, Szablon:TtSzablon:Odn. Jednak pozostał on jedynie w fazie propozycji jako INTERNET-DRAFT.
Zestaw unika znaków Szablon:Tt, które muszą być zamieniane na sekwencje specjalne w niektórych przypadkach w kodzie XMLSzablon:Odn. Ponadto wykluczone są Szablon:Tt, które również mogłyby stanowić problemy w innych środowiskachSzablon:Odn.
Znak Szablon:Tt ma podwójną funkcję. Reprezentuje cyfrę i na podobieństwo z programem Szablon:Tt grupę czterech bajtów o wartości zero. Cyfra o wartości nigdy nie wystąpi na pierwszej pozycji, a to umożliwia jej równoległe zastosowanie do tego celuSzablon:Odn.
Najmniej znacząca cyfra jest kodowana w systemie liczbowym o podstawie Umożliwia to przypisanie ostatnim cyfrom kodowanym przez Szablon:Tt drugiej funkcji oznaczającej wyrównanie długości blokuSzablon:Odn.
Zestawienie znaków do kodowania
Uwagi
Przypisy
Bibliografia
- Szablon:RFC
- Szablon:Cytuj
- Szablon:Cytuj
- Szablon:RFC
- Szablon:Cytuj
- Szablon:Cytuj
- Szablon:Cytuj
- Szablon:Cytuj
- Szablon:Cytuj
- Szablon:Cytuj
- Szablon:Cytuj
- Szablon:Cytuj
Linki zewnętrzne
Błąd rozszerzenia cite: Istnieje znacznik <ref> dla grupy o nazwie „uwaga”, ale nie odnaleziono odpowiedniego znacznika <references group="uwaga"/>