# Փյունիկոդ

ՓյունիկոդՍահմանափակ ASCII նիշերի ենթաբազմություն, որն օգտագործվում է ինտերնետային հոսթ անունների համար

նիշերի կոդավորման սխեմա, ստանդարտ| Կիրառությունը | միջազգայնացված դոմենային անուն |

**Փյունիկոդ** (անգլ.՝ Punycode, [ˈpjuːniˌkəʊd]), յունիկոդի ներկայացումն է՝ սահմանափակ ASCII նիշերի ենթաբազմությամբ, որն օգտագործվում է ինտերնետային հոսթ անունների համար: Փյունիկոդի միջոցով յունիկոդ նիշեր պարունակող հոսթ անունները վերակոդավորվում են ASCII ենթաբազմության, որը բաղկացած է տառերից, թվանշաններից և գծիկներից, որը կոչվում է տառ-թվանշան-գծիկ (LDH) ենթաբազմություն: Օրինակ, գերմաներեն *München-ը* ( անգլերեն ՝ Munich ) կոդավորվում է որպես *Mnchen-3ya*:

Մինչդեռ Դոմենային անվան համակարգը (DNS) տեխնիկապես աջակցում է դոմենային անվանումների պիտակներում օկտետների կամայական հաջորդականությունները, DNS ստանդարտները խորհուրդ են տալիս օգտագործել ASCII-ի LDH ենթաբազմությունը, որը սովորաբար օգտագործվում է հոսթ անունների համար, և պահանջում են, որ DNS դոմենային անունների միջև տողերի համեմատությունները լինեն անզգայուն մեծատառերի նկատմամբ: Փյունիկոդ շարահյուսությունը յունիկոդ նիշեր պարունակող տողերի, ինչպիսիք են միջազգայնացված դոմենային անունները (IDNA), կոդավորման մեթոդ է DNS-ի կողմից նախընտրելի ASCII-ի LDH ենթաբազմության մեջ: Այն նշված է IETF Request for Comments 3492-ում:

## Անվան ծագում

RFC-ի հեղինակ Ադամ Կոստելոն գրել է.

> Ինչո՞ւ «Փյունիկոդ»: Այն հանգավորվում է Յունիկոդի հետ և նախատեսված է Յունիկոդի տողերը կոդավորելու համար: Այն «փոքր» է երեք իմաստով՝ կոդավորված տողերում օգտագործվող նիշերի ցանկը փոքր է, կոդավորված տողերը կարճ են, և ներդրումը փոքր է:
>
>

## Նկարագրություն

Ինչպես նշված է RFC 3492-ում, «Փյունիկոդը Bootstring անվամբ ավելի ընդհանուր ալգորիթմի օրինակն է, որը թույլ է տալիս «հիմնական» կոդային կետերի փոքր հավաքածուից կազմված տողերին եզակի կերպով ներկայացնել ավելի մեծ հավաքածուից վերցված կոդային կետերի ցանկացած տող»։ Punycode-ը սահմանում է ընդհանուր Bootstring ալգորիթմի պարամետրերը՝ յունիկոդ տեքստի բնութագրերին համապատասխանելու համար։ Այս բաժինը ցույց է տալիս փյունիկոդ կոդավորման ընթացակարգը՝ որպես օրինակ օգտագործելով գերմաներեն «bücher» (անգլերեն՝ books) տողը, որը փոխարկվում է «bcher-kva» պիտակի։

Կոդավորման և վերծանման ալգորիթմները պարզեցնելու համար որևէ փորձ չի արվել կանխելու որոշ կոդավորված արժեքների կողմից անընդունելի յունիկոդ արժեքների կոդավորումը. սակայն դրանք պետք է ստուգվեն և հայտնաբերվեն վերծանման ընթացքում։

Փյունիկոդը նախատեսված է աշխատելու բոլոր գրերի համակարգերի հետ և ինքնաօպտիմալացվող է՝ փորձելով հարմարվել տողի ներսում առկա նիշերի բազմությունների շրջանակներին աշխատանքի ընթացքում։ Այն օպտիմիզացված է այն դեպքի համար, երբ տողը կազմված է զրո կամ ավելի ASCII նիշերից և, բացի այդ, միայն մեկ այլ գրի համակարգի նիշերից, բայց կկարողանա մշակել ցանկացած կամայական յունիկոդ տող։ DNS-ի օգտագործման համար ենթադրվում է, որ դոմենի անվան տողը նորմալացվել է nameprep-ի միջոցով և (վերին մակարդակի դոմենների համար) զտվել է պաշտոնապես գրանցված լեզվի աղյուսակի հիման վրա՝ նախքան փյունիկոդով կոդավորվելը, և որ DNS արձանագրությունը սահմանափակումներ է դնում ելքային փյունիկոդ տողի ընդունելի երկարությունների վրա։

## ACE նախածանց միջազգայնացված դոմենային անունների համար

Ոչ միջազգային դոմենային անուններում գծիկները փյունիկոդ վերծանումը կանխելու համար, միջազգայնացված դոմենային անուններում փյունիկոդ հաջորդականություններին նախորդում է `xn--` տողը։ Սա կոչվում է ACE (ASCII համատեղելի կոդավորում)։ Այսպիսով, «bücher.tld» դոմենի անունը URL-ում կներկայացվի որպես «xn--bcher-kva.tld»։

## Օրինակներ

Հետևյալ աղյուսակը ցույց է տալիս փյունիկոդ կոդավորման օրինակներ տարբեր տեսակի մուտքային տվյալների համար։

| Մուտքագրում | փյունիկոդ | նկարագիր |
| --- | --- | --- |
|  |  | Դատարկ տող |
| a | a- | Միայն ASCII նիշեր, մեկ, փոքրատառ |
| A | A- | Միայն ASCII նիշեր, մեկ, մեծատառ |
| 3 | 3- | Միայն ASCII նիշեր, մեկ, մեկ թվանշան |
| - | -- | Միայն ASCII նիշեր, մեկը՝ գծիկ |
| -- | --- | Միայն ASCII նիշեր, երկու գծիկ |
| London | London- | Միայն ASCII նիշեր, մեկից ավելի, առանց գծիկների |
| Lloyd-Atkinson | Lloyd-Atkinson- | Միայն ASCII նիշեր, մեկ գծիկ |
| This has spaces | This has spaces- | Միայն ASCII նիշեր՝ բացատներով |
| -> $1.00 <- | -> $1.00 <-- | Միայն ASCII նիշեր, խառը նշաններ |
| Б | d0a | ASCII նիշեր չկան, մեկ կյուրեղագիր նիշ |
| ü | tda | ASCII նիշեր չկան, մեկ Latin-1 լրացուցիչ նիշ |
| α | mxa | ASCII նիշեր չկան, մեկ հունական նիշ |
| 例 | fsq | ASCII նիշեր չկան, մեկ CJK նիշ |
| 😉 | n28h | ASCII նիշեր չկան, մեկ էմոջի նիշ |
| αβγ | mxacd | ASCII նիշեր չկան, մեկից ավելի նիշ |
| München | Mnchen-3ya | Խառը տող՝ մեկ նիշով, որը ASCII նիշ չէ |
| Mnchen-3ya | Mnchen-3ya- | «Մյունխենի» կրկնակի կոդավորված փյունիկոդը |
| München-Ost | Mnchen-Ost-9db | Խառը տող՝ մեկ ոչ ASCII նիշով և գծիկով |
| Bahnhof München-Ost | Bahnhof Mnchen-Ost-u6b | Խառը տող՝ մեկ բացատով, մեկ գծիկով և մեկ ոչ ASCII նիշով |
| abæcdöef | abcdef-qua4k | Խառը տող, երկու ոչ ASCII նիշ |
| правда | 80aafi6cg | Ռուսերեն, առանց ASCII-ի |
| ยจฆฟคฏข | 22cdfh1b8fsa | Թաիլանդերեն, առանց ASCII-ի |
| 도메인 | hq1bm8jm9l | Կորեերեն, առանց ASCII-ի |
| ドメイン名例 | eckwd4c7cu47r2wf | Ճապոներեն, առանց ASCII-ի |
| MajiでKoiする5秒前 | MajiKoi5-783gue6qz075azm5e | Ճապոներեն ASCII-ով |
| 「bücher」 | bcher-kva8445foa | Խառը ոչ ASCII սկրիպտներ (Latin-1 հավելված և CJK) |

## Ծանոթագրություններ