Jeśli jesteś właścicielem tej strony, możesz wyłączyć reklamę poniżej zmieniając pakiet na PRO lub VIP w panelu naszego hostingu już od 4zł! Do you want to support owner of this site? Click here and donate to his account some amount, he will be able to use it to pay for any of our services, including removing this ad.

Str. główna i mapa serwisu, kodowanie Quoted-Printable, kodowanie UTF-8, kodowanie UTF-7, kodowanie UTF-16

Opis kodowania Base64

Kodowanie Base64 jest kodowaniem transportowym, to znaczy jest używane do przekształcenia treści przesyłki lub jej części z postaci 8-bitowej na 7-bitową. W niektórych sytuacjach stosowanie kodowania 8-bitowego jest niedozwolone z powodów technicznych. Samo kodowanie Base64 nie ma żadnego związku z charsetem np. polskich liter i jest identycznie stosowane dla ISO-8859-2, UTF-8 i wszystkich innych charsetów.

Kodowanie polega na przedstawieniu kodowanego ciągu w postaci binarnej, pogrupowaniu bitów w grupy 6-bitowe i przedstawieniu każdej grupy za pomocą jednego z 64 specjalnie przyporządkowanych znaków ze zbioru US-ASCII (każdy będzie wysłany jako 8 bitów z najbardziej znaczącym bitem równym zero). Treść zakodowana Base64 jest nieczytelna dla człowieka.

grupaznak grupaznak grupaznak grupaznak
000000 A 010000 Q 100000 g 110000 w
000001 B 010001 R 100001 h 110001 x
000010 C 010010 S 100010 i 110010 y
000011 D 010011 T 100011 j 110011 z
000100 E 010100 U 100100 k 110100 0
000101 F 010101 V 100101 l 110101 1
000110 G 010110 W 100110 m 110110 2
000111 H 010111 X 100111 n 110111 3
001000 I 011000 Y 101000 o 111000 4
001001 J 011001 Z 101001 p 111001 5
001010 K 011010 a 101010 q 111010 6
001011 L 011011 b 101011 r 111011 7
001100 M 011100 c 101100 s 111100 8
001101 N 011101 d 101101 t 111101 9
001110 O 011110 e 101110 u 111110 +
001111 P 011111 f 101111 v 111111 /

Należy pamiętać, że po pierwsze liczy się wielkość liter, a po drugie kodowi 001110 jest przyporządkowana wielka litera O, a kodowi 110100 cyfra zero, nie można ich mylić.

Kodowanie

Za przykład posłuży nam ciąg słów „żółw As”, wybrany charset to ISO-8859-2.

  1. Każdy znak ciągu do zakodowania przedstawiamy w postaci binarnej właściwej dla wybranego charsetu (dla ułatwienia pokazany będzie pośredni etap przedstawienia w postaci szesnastkowej):
    BF F3 B3 77 20 41 73 → 10111111 10110011 01110111 01101001 00100000 01000001 01110011
  2. Grupujemy zapis binarny w grupy po sześć bitów, zaczynając od lewej strony:
    10111111 10110011 01110111 01101001 00100000 01000001 01110011 → 101111 111011 001101 110111 011010 010010 000001 000001 011100 11
  3. W przypadku, gdy ostatnia grupa zawiera mniej niż sześć bitów, dopisujemy na końcu taką liczbę zer, by grupa zawierała sześć bitów:
    101111 111011 001101 110111 011010 010010 000001 000001 011100 11 → 101111 111011 001101 110111 011010 010010 000001 000001 011100 110000
  4. W tabeli kodów znajdujemy odpowiedniki kolejnych grup sześciobitowych i zapisujemy je:
    101111 111011 001101 110111 011010 010010 000001 000001 011100 110000 → v6N3aSBBcw
  5. Jeżeli w otrzymanym ciągu ilość znaków nie jest wielokrotnością czterech, należy uzupełnić go do wielokrotności znakami równości:
    v6N3aSBBcw → v6N3aSBBcw==

Chcąc użyć tak zakodowanego ciągu w nagłówkach maila lub posta należy go jeszcze uzupełnić o specjalne znaczniki. Gotowy ciąg w nagłówku będzie wyglądał tak:
=?iso-8859-2?B?v6N3aSBBcw==?=
Należy również uwzględnić, że zakodowany ciąg może mieć nie więcej niż 76 znaków – dłuższe ciągi należy dzielić na osobne linie.

Trzeba też pamiętać o konieczności zakodowania znaków kontrolnych: koniec linii to para znaków 0D 0A (00001101 00001010), a tabulator to znak 09 (00001001).

Dekodowanie

Dekodowanie jest procesem odwrotnym do kodowania. Za przykład posłuży nam ciąg v6N3aSBBcw==, wybrany charset to ISO-8859-2.

  1. Jeżeli ciąg kończy się znakami równości, odrzucamy je:
    v6N3aSBBcw== → v6N3aSBBcw
  2. W tabeli kodów znajdujemy odpowiedniki kolejnych znaków i zapisujemy je:
    v6N3aSBBcw → 101111 111011 001101 110111 011010 010010 000001 000001 011100 110000
  3. Grupujemy zapis binarny w grupy po 8 bitów, zaczynając od lewej:
    101111 111011 001101 110111 011010 010010 000001 000001 011100 110000 → 10111111 10110011 01110111 01101001 00100000 01000001 01110011 0000
  4. Ostatnia grupa może mieć mniej niż osiem bitów, wówczas powinna składać się z samych zer (jeżeli tak nie jest, to znaczy, że ciąg nie został prawidłowo zakodowany lub został ucięty w czasie transmisji), odrzucamy tę grupę:
    10111111 10110011 01110111 01101001 00100000 01000001 01110011 0000 → 10111111 10110011 01110111 01101001 00100000 01000001 01110011
  5. Każdy bajt (grupa ośmiu bitów) oznacza numer znaku w charsecie, jakiego użyto do kodowania tekstu. Można je przekształcić do dogodniejszego zapisu (dziesiętny, szesnastkowy), po czym zastępuje się każdy bajt znakiem z danej pozycji charsetu:
    10111111 10110011 01110111 01101001 00100000 01000001 01110011 → BF F3 B3 77 20 41 73 → żółw As

W odkodowanym tekście mogą pojawić się pary znaków 00001101 00001010 (0D 0A) – każda taka para oznacza nową linię (Enter), a także znaki 00001001 (09) – oznaczają one tabulatory (Tab).

Przyrost objętości

Trzy bajty ciągu wyjściowego są reprezentowane przez cztery bajty Base64, co daje przyrost równy 33%.

licznik