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ł!

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