Кодування

Punycode encode/decode

Кодування доменних імен з юнікод-символами (IDN) у ASCII-сумісний формат Punycode (xn--) і назад.

Система DNS історично підтримує лише ASCII-символи, тому доменні імена з кирилицею, ієрогліфами чи іншими не-ASCII символами (IDN) кодуються в Punycode — ASCII-сумісний запис із префіксом xn--. Інструмент кодує й декодує такі домени.

Як користуватися

Типові сценарії

Що варто памʼятати

Схожі візуально символи з різних алфавітів (наприклад, кирилична «а» і латинська «a») можуть утворювати домен, що виглядає ідентично відомому бренду, — це основа homograph-фішингу.

Не всі браузери показують декодований Unicode однаково: при змішуванні алфавітів у мітці домену браузер часто навмисно показує сирий xn---запис як застереження.

Стаття про цей інструмент: Punycode: як домени з кирилицею працюють у DNS

Часті запитання

Навіщо потрібен Punycode?

DNS підтримує лише ASCII-символи, тому доменні імена з юнікод-літерами (кирилицею, умлаутами тощо) перекодовують у ASCII-сумісний формат Punycode з префіксом xn--. Саме такий вигляд домен має "під капотом", хоча в адресному рядку браузер зазвичай показує оригінальні символи.

У чому небезпека IDN-доменів з юнікод-символами?

Різні алфавіти містять символи, які виглядають однаково (наприклад, кирилична "а" і латинська "a"), тому шахраї можуть зареєструвати домен-двійник для фішингу — це називають homograph-атакою. Розкодувавши Punycode, можна перевірити, з яких символів насправді складається домен.

Чи можна закодувати весь URL, а не лише домен?

Ні, Punycode застосовується лише до окремих міток доменного імені (частин між крапками), а не до шляху, параметрів запиту чи схеми URL. Для іншого тексту в URL використовують percent-encoding.

Як розпізнати, що посилання використовує Punycode?

Закодований домен завжди має префікс xn-- перед кожною міткою, що містить не-ASCII символи. Якщо в адресному рядку чи листі бачите домен, що починається на xn--, це ознака IDN — варто перевірити, який текст ховається за кодуванням.

Чи всі браузери показують кирилицю в адресному рядку однаково?

Ні. Деякі браузери показують декодований Unicode лише якщо всі символи домену належать одному алфавіту, а при змішуванні алфавітів (ознака homograph-атаки) навмисно показують сирий xn---запис замість оригінальних символів.

Статті: Кодування

Base64: навіщо потрібне кодування і як воно працює

Як Base64 перетворює бінарні дані на текст ASCII і де це реально потрібно.

Base32: чим відрізняється від Base64 і коли зручніший

Регістронезалежний алфавіт Base32 і сценарії, де він зручніший за Base64.

URL Encode/Decode: percent-encoding у посиланнях

Як спецсимволи в адресних рядках і query-параметрах перетворюються на %XX-послідовності.

HTML Entities: як безпечно виводити спецсимволи на сторінці

Чому символи < > & потрібно екранувати і як це запобігає поламаній розмітці.

JWT: структура токена та що означає "декодувати" JWT

Header, payload і signature JWT-токена та чому декодування — це не те саме, що перевірка підпису.

Unicode Escape: що означають послідовності \uXXXX

Звідки в JSON і JS-рядках беруться послідовності виду \u0041 і що вони означають.

ROT13 і шифр Цезаря: проста заміна символів

Чому зсув на 13 літер робить ROT13 симетричним і навіщо його взагалі використовують сьогодні.

Азбука Морзе: як текст перетворюється на крапки й тире

Принцип кодування літер крапками й тире та де азбука Морзе застосовується зараз.

Data URI: коли вбудовувати зображення прямо в код

Як data:-URI вбудовує вміст файлу прямо в HTML чи CSS і коли це виправдано.

Gzip + Base64: стиснення даних для передачі текстом

Навіщо стиснені бінарні дані ще й кодують у Base64 перед тим, як покласти в текстове поле.

XML Entities: екранування символів у XML-документах

П’ять обов’язкових XML-entity, без яких документ ламається при парсингу.