Punycode

Punycode jest metodą kodowania znormalizowaną w dokumencie RFC 3492 do konwertowania ciągów znaków Unicode na zgodne z ASCII ciągi znaków, które składają się ze znaków ado z, 0do 9i łącznika ( -). Punycode został zaprojektowany do unikatowego i odwracalnego przedstawiania umiędzynarodowionych nazw domen składających się ze znaków Unicode i znaków ASCII.

Powód wprowadzenia

Najważniejszym powodem wprowadzenia Punycode był fakt, że w ustanowionym systemie nazw domenowych dozwolone są tylko nazwy składające się z 26 liter łacińskich , cyfr od 0 do 9 oraz łącznika-minus („łącznik klawiaturowy”) . Było to wystarczające dla języka angielskiego , ale większość innych języków zawierać dodatkowe znaki - w języku niemieckim, na przykład litery umlaut ä , öoraz üa ß. Aby móc przetwarzać dowolny tekst z takich języków, w 2003 r. Wprowadzono procedurę Internationalizing Domain Names in Applications , która wykorzystuje Punycode jako procedurę kodowania.

Jeśli tekst ma zostać przesłany do systemu, który obsługuje tylko ASCII, jest najpierw konwertowany na ASCII przy użyciu Punycode. Należy zauważyć, że w wielu przypadkach wynikowy tekst jest wydłużony. I odwrotnie, jeśli ten tekst ma zostać pobrany z systemu ASCII, jest on tłumaczony z powrotem do jego oryginalnej postaci przy użyciu Punycode. Jeśli tekst nie zawiera żadnych znaków specjalnych, nie zostanie zmieniony przez tę procedurę.

Procedura konwersji Punycode została ustalona z uwzględnieniem następujących aspektów:

kompletność
Można wprowadzić dowolną nazwę
Wyjątkowość
Do każdej nazwy przypisana jest dokładnie jedna implementacja
Odwracalność
Każda przekonwertowana nazwa może zostać przekonwertowana z powrotem
Wydajność
Przekonwertowana nazwa nie jest dużo dłuższa niż nazwa źródłowa
prostota
Proces jest stosunkowo łatwy do wdrożenia
Czytelność
Nazwy składające się głównie z liter łacińskich często pozostają czytelne, ponieważ znaki są zmieniane adopieroz

Zasady konwersji

Przykłady
Strunowy Punycode IDNA
Alfabet Alfabet- Alfabet *
abæcdöef abcdef-qua4k xn - abcdef-qua4k
piękny schn-7qa xn - schn-7qa
ย จ ฆ ฟ ค ฏ ข 22cdfh1b8fsa xn - 22cdfh1b8fsa
74h xn - 74 godz
74h 74h 74h *
xn-- xn --- n. pok.
* Punycode nie jest używany

W dalszej części litery ado zi cyfry 0do są znakami podstawowymi 9. Wraz z łącznikiem minus ( -) jako separatorem, te 37 znaków reprezentuje jedyne prawidłowe znaki w tekście zakodowanym zgodnie z Punycode.

Zawiera ciąg do konwersji

  • tylko znaki podstawowe, dodawany jest znak minus;
  • zarówno znaki bazowe, jak i inne niż podstawowe, wszystkie znaki podstawowe są wymienione z zachowaniem ich kolejności, a na koniec zakodowane znaki niebazowe są dołączane oddzielone myślnikiem minus;
  • tylko znaki inne niż podstawowe, wynikiem konwersji jest tylko ich sekwencja kodu, bez separatorów.

Aby otrzymany ciąg znaków był jak najmniejszy, znaki specjalne nie są kodowane „jeden do jednego”, ale zgodnie z metodą Punycode. Znaki inne niż podstawowe są najpierw sortowane według ich wartości numerycznej (punkt kodowy Unicode, np. „Ä” → 228, „ж” → 1078). Różnica między wartościami poszczególnych znaków jest kodowana jako liczba wraz z odpowiednią pozycją w oryginalnym ciągu znaków. Liczba ta jest następnie reprezentowana przez 36 znaków podstawowych i dołączana do tekstu. Szczegóły tej procedury są określone w dokumencie RFC 3492 , który zawiera również referencyjną implementację w języku programowania C do kodowania i dekodowania, a także liczne przykłady.

Podczas tworzenia nazw domen zgodnie ze standardem internacjonalizacji nazw domen w aplikacjach (IDNA) przedrostek „ xn--” jest umieszczany przed znakami innymi niż znaki podstawowe , w przeciwnym razie (tylko znaki podstawowe) kod Punycode nie jest używany.

Należy również zauważyć, że podczas tworzenia nazwy domeny IDNA, przed kodowaniem zgodnie z Punycode, nazwa domeny jest normalizowana zgodnie z określonymi zasadami (np. Jest konwertowana na małe litery, a niektóre znaki Unicode są mapowane na inne znaki „równoważne” ). Ta normalizacja nie jest częścią Punycode i i. re. Zwykle nie jest wyraźnie odwracalne.

linki internetowe