UTF-7

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

UTF-7 (ang. 7-bit Unicode Transformation Format) – sposób zapisu tekstu w formacie Unicode przy użyciu zmiennej liczby znaków ASCII, nadający się na przykład do użycia w wiadomościach MIME.

Listy wysyłane przy użyciu MIME muszą być zapisane wyłącznie przy użyciu ASCII, więc każdy list używający bezpośrednio ośmio- lub szesnastobitowego unikodu (na przykład UTF-16) jest traktowany jako wadliwy. Unikod zapisany przy użyciu UTF-7 może być przesyłany bez użycia nagłówka Content-Transfer-Encoding (który specyfikuje sposób reprezentacji danych binarnych za pomocą tekstu ASCII), ale pod warunkiem, że kodowanie znaków zostanie jawnie określone. Dodatkowo, przy użyciu UTF-7 w nagłówkach (np. Subject:), należy wykorzystać Encoded-Word ze standardu MIME, żeby to ujawnić.

Główną wadą UTF-7 jest jego niewygodne przetwarzanie: większość znaków ASCII może kodować niemal dowolne znaki Unicode a każdy znak Unicode można zakodować na wiele sposobów (w zależności od sąsiednich znaków). Internet Mail Consortium zachęca do niestosowania UTF-7 w poczcie elektronicznej.

Zmodyfikowana postać UTF-7 jest używana przez protokół IMAP.

Opis[edytuj | edytuj kod]

Kodowanie UTF-7 zostało po raz pierwszy zdefiniowane w dokumencie RFC 1642 (A Mail-Safe Transformation Format of Unicode), który później został zastąpiony przez RFC 2152.

Znaki o kodach poniżej 0x80 (notacja szesnastkowa), w zakresie ASCII (z wyjątkiem znaku +) są zapisywane bez zmian. Każdy znak o kodzie powyżej 0x80 jest zapisywany przy użyciu następującej sekwencji:

  • znak +
  • reprezentacja UTF-16, zakodowana w zmodyfikowanym Base64
  • znak - (ignorowany) lub znak nowej linii lub powrotu karetki (te nie są ignorowane).

Znak + jest zapisywany jako +-.

Przykłady[edytuj | edytuj kod]

  • "Hello, World!" przechodzi na "Hello, World!"
  • "1 + 1 = 2" przechodzi na "1 +- 1 = 2"
  • "£1" przechodzi na "+AKM-1". Pozycja znaku funta brytyjskiego w UTF-16 to 0x00A3. Zapis w zmodyfikowanym kodzie Base64:
    • 0b000000 = 0 = 'A'
    • 0b001010 = 10 = 'K'
    • 0b0011[00] = 12 = 'M', przy czym ostatnie dwa bity oktetu są wypełnieniem (padding).

Zobacz też[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]