Koder i dekoder Base91

Zamień tekst, bajty szesnastkowe lub pliki na basE91 i z powrotem. basE91 upakowuje dane binarne w 91 drukowalnych znakach ASCII i daje krótszy wynik niż Base64 czy Base85.

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wybierz „Koduj”, aby zamienić tekst lub bajty na basE91, lub „Dekoduj”, aby zamienić basE91 z powrotem na dane.
  2. Wpisz lub wklej dane wejściowe albo otwórz plik. W przypadku surowych bajtów ustaw „Wejście jako” na „Hex”.
  3. Wynik aktualizuje się na bieżąco podczas pisania. Przy dekodowaniu ustaw „Wyjście jako” na „Tekst” lub „Hex”.
  4. Skopiuj wynik lub pobierz go jako plik.

Czym jest basE91?

basE91 to kodowanie binarno-tekstowe opracowane przez Joachima Henkego. Używa 91 z 95 drukowalnych znaków ASCII: wszystkich z wyjątkiem spacji, apostrofu ', łącznika - i ukośnika wstecznego \.

Nie działa na stałych blokach bajtów. Koder zbiera bity wejściowe w buforze i pobiera je po 13 naraz. Jeśli 13-bitowa wartość jest większa niż 88, zapisuje ją jako dwa znaki. Jeśli wynosi 88 lub mniej, pobiera dodatkowo 14. bit, co nadal się mieści, ponieważ dwa znaki base-91 mogą wyrazić 91 × 91 = 8281 różnych wartości. Każde 13 lub 14 bitów daje więc dokładnie 2 znaki.

W efekcie narzut wynosi najwyżej ok. 23%, a dla danych z długimi ciągami bajtów zerowych spada do ok. 14%. Dane losowe lub skompresowane wypadają blisko górnej granicy.

basE91 na tle innych kodowań

KodowanieLiczba znakówRozmiar wyniku
Hex162 × rozmiar wejścia
Base5858ok. 1,37 × rozmiar wejścia
Base64641,33 × rozmiar wejścia
Base85 / Ascii85851,25 × rozmiar wejścia
basE9191od ok. 1,14 do 1,23 × rozmiar wejścia

Aby porównać rzeczywiste długości wyniku dla własnych danych, wpisz je w narzędziu Wszystkie kodowania.

O czym warto pamiętać

  • Znaki ucieczki. Alfabet zawiera cudzysłów ", który w JSON i w większości literałów łańcuchowych trzeba poprzedzić znakiem ucieczki, oraz znaki <, > i &, które w HTML i XML trzeba zastąpić encjami. basE91 nie jest bezpieczny dla URL.
  • Dekoduj cały ciąg. Ponieważ bity przechodzą przez granice znaków, fragmentu wyciętego ze środka ciągu basE91 nie da się zdekodować samodzielnie.
  • Obsługa. basE91 nie jest standardem IETF. Autor publikuje implementacje referencyjne w C i innych językach, a porty istnieją dla większości platform, np. pakiet base91 dla Pythona.

Specyfikacja

Alfabet91 drukowalnych znaków ASCII
Rozmiar wynikuOk. 123%
DopełnienieBrak
StandardbasE91 (Joachim Henke)
Rozróżnia wielkość literTak

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!>OwJh>}AQ;r@@Y?F
Base64.isxD7gXm^?t#5
你好I_5k7aPE

Najczęściej zadawane pytania

Czy basE91 daje krótszy wynik niż Base64?

Tak. Base64 zawsze dodaje 33%, a basE91 najwyżej ok. 23%, a w przypadku danych z wieloma bajtami zerowymi jeszcze mniej. Dla pliku o rozmiarze 1 MB oznacza to oszczędność około 100 KB.

Jakich znaków używa basE91?
Liter A-Z i a-z, cyfr 0-9 oraz symboli !#$%&()*+,./:;<=>?@[]^_`{|}~". Spacja, apostrof, łącznik i ukośnik wsteczny nie są używane.
Dlaczego nazwa jest zapisywana jako basE91?

Tak zapisuje ją autor. basE91 i Base91 oznaczają to samo kodowanie, a ta strona stosuje oryginalny algorytm.

Czy białe znaki psują dekodowanie?

Nie. Spacje i znaki końca wiersza nie należą do alfabetu, więc ten dekoder je ignoruje. Zawinięty tekst basE91 można wkleić bezpośrednio.