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 > IDN > RACE

Ogonki i inne znaki narodowe w domenach – RACE

W kodowaniu RACE wykorzystywane jest kodowanie Base32:

00000a01000i10000q11000y
00001b01001j10001r11001z
00010c01010k10010s110102
00011d01011l10011t110113
00100e01100m10100u111004
00101f01101n10101v111015
00110g01110o10110w111106
00111h01111p10111x111117

Algorytm kodowania jest bardzo prosty: każdy segment zawierający znaki wymagające kodowania traktowany jest osobnio. Każdy znak przedstawiony jest jako dwa bajty w kodowaniu UTF-16 BE. Są możliwe trzy sytuacje, każda będzie opisana osobno:

  1. starszy bajt każdego znaku jest taki sam,
  2. starszy bajt każdego znaku to jedna z dwóch liczb, przy czym jedna z nich to 00,
  3. starsze bajty znaków są różne, przy czym nie zachodzi sytuacja opisana w p-cie 2.

Ad. 1: na przykładzie domen www.müller.de i www.релком.ru:

  1. blok do zakodowania przedstawiany jest jako ciąg znaków UTF-16:
       m    ü    l    l    e    r
    006D 00FC 006C 006C 0065 0072
       р    е    л    к    о    м
    0440 0435 043B 043A 043E 043C
  2. Ponieważ w każdym wypadku starszy bajt jest taki sam (00 w pierwszym wypadku, 04 w drugim), bajt ten jest tymczasowo ignorowany. Tworzy się ciąg zaczynający się od górnego bajtu, po którym umieszczone są dolne bajty:
    006D 00FC 006C 006C 0065 007 → 00 6D FC 6C 6C 65 72
    0440 0435 043B 043A 043E 043C → 04 40 35 3B 3A 3E 3C
  3. Utworzone ciągi przedstawia się w postaci binarnej jako liczby 8-bitowe (z zerami na początku):
    00 6D FC 6C 6C 65 72 → 00000000 01101101 11111100 01101100 01101100 01100101 01110010
    04 40 35 3B 3A 3E 3C → 00000100 01000000 00110101 00111011 00111010 00111110 00111100
  4. Liczby 8-bitowe grupuje się w ciągi, a następnie dzieli się na grupy po pięć bitów. Jeżeli ostatnia grupa zawiera mniej niż pięć bitów, uzupełnia się ją zerami końcowymi do pięciu:
    00000000 01101101 11111100 01101100 01101100 01100101 01110010 → 00000 00001 10110 11111 11000 11011 00011 01100 01100 10101 11001 00000
    00000100 01000000 00110101 00111011 00111010 00111110 00111100 → 00000 10001 00000 00011 01010 01110 11001 11010 00111 11000 11110 00000
  5. Każdej grupie 5-bitowej przyporządkowuje się literę lub cyfrę zgodnie z kodowaniem Base32:
    00000 00001 10110 11111 11000 11011 00011 01100 01100 10101 11001 00000 → abw7y3dmmvza
    00000 10001 00000 00011 01010 01110 11001 11010 00111 11000 11110 00000 → aradkoz2hy6a
  6. Przed tak zakodowany ciąg wstawia się znacznik kodowania bq--:
    bq--abw7y3dmmvza
    bq--aradkoz2hy6a

Ad. 2: na przykładzie domeny www.żaba.pl:

  1. blok do zakodowania przedstawiany jest jako ciąg znaków UTF-16:
       ż    a    b    a
    017C 0061 0060 0061
  2. Starszy bajt może być albo 01, albo 00. W takiej sytuacji również odrzuca się starszy bajt każdego znaku i tworzy się ciąg zaczynający się od starszego bajtu odmiennego od 00 (w naszym przykładzie 01), a przed młodszy bajt każdego znaku, którego starszy bajt to 00, wstawia się FF:
    017C 0061 0060 0061 → 01 7C FF 61 FF 60 FF 61
    Gdyby w ciągu istniał znak o młodszym bajcie FF, należałoby go zastąpić ciągiem dwubajtowym FF 99.
  3. Utworzony ciąg przedstawia się w postaci binarnej jako liczby 8-bitowe (z zerami na początku):
    01 7C FF 61 FF 60 FF 61 → 00000001 01111100 11111111 01100001 11111111 01100010 11111111 01100001
  4. Liczby 8-bitowe grupuje się w ciągi, a następnie dzieli się na grupy po pięć bitów. Jeżeli ostatnia grupa zawiera mniej niż pięć bitów, uzupełnia się ją zerami końcowymi do pięciu:
    00000001 01111100 11111111 01100001 11111111 01100010 11111111 01100001 → 00000 00101 11110 01111 11110 11000 01111 11111 01100 01011 11111 10110 00010
  5. Każdej grupie 5-bitowej przyporządkowuje się literę lub cyfrę zgodnie z kodowaniem Base32:
    00000 00101 11110 01111 11110 11000 01111 11111 01100 01011 11111 10110 00010 → af6p6yp7ml7wc
  6. Przed tak zakodowany ciąg wstawia się znacznik kodowania bq--:
    bq--af6p6yp7ml7wc

Ad. 3: na przykładzie domeny www.cośza1€.com:

  1. blok do zakodowania przedstawiany jest jako ciąg znaków UTF-16:
       c    o    ś    z    a    1    €
    0063 006F 015B 007A 0061 0031 20AC
  2. Starszy bajt może być albo 00, albo 01, albo 20. W takiej sytuacji tworzy się ciąg składajacy się z wszystkich bajtów (górnych i dolnych):
    00 63 00 6F 01 5B 00 7A 00 61 00 31 20 AC
  3. Ciąg poprzedza się znakiem D8:
    00 63 00 6F 01 5B 00 7A 00 61 00 31 20 AC → D8 00 63 00 6F 01 5B 00 7A 00 61 00 31 20 AC
  4. Utworzony ciąg przedstawia się w postaci binarnej jako liczby 8-bitowe (z zerami na początku):
    D8 00 63 00 6F 01 5B 00 7A 00 61 00 31 20 AC → 11011000 00000000 01100011 00000000 01101111 00000001 01011011 00000000 01100001 00000000 00110001 00100000 10101100
  5. Liczby 8-bitowe grupuje się w ciągi, a następnie dzieli się na grupy po pięć bitów. Jeżeli ostatnia grupa zawiera mniej niż pięć bitów, uzupełnia się ją zerami końcowymi do pięciu:
    11011000 00000000 01100011 00000000 01101111 00000001 01011011 00000000 01100001 00000000 00110001 00100000 10101100 → 11011 00000 00000 00110 00110 00000 00011 01111 00000 00101 01101 10000 00000 11000 01000 00000 00110 00100 10000 01010 11000
  6. Każdej grupie 5-bitowej przyporządkowuje się literę lub cyfrę zgodnie z kodowaniem Base32:
    11011 00000 00000 00110 00110 00000 00011 01111 00000 00101 01101 10000 00000 11000 01000 00000 00110 00100 10000 01010 11000 → 3aaggadpafnqa6qameadcifm
  7. Przed tak zakodowany ciąg wstawia się znacznik kodowania bq--:
    bq--3aaggadpafnqa6qameadcifm

Wadą systemu jest długość kodu – postać zakodowana może być nawet czterokrotnie dłuższa od postaci jawnej. System został wycofany z końcem 2003 i zastąpiony przez punycode.

Linki:

licznik