> 國際 | 網域 | Unicode <
// Punycode - 將 Unicode 編碼為 ASCII 的國際網域工具
[UNICODE]
支援 Unicode
支援編碼任意 Unicode 字元,包括表情符號與特殊文字。
[DNS]
相容 DNS
產生僅含 ASCII 的網域名稱,可直接用於 DNS 基礎建設。
[STANDARD]
RFC 3492
針對國際化網域名稱(IDN)的官方 IETF 標準。
>> 技術說明
Punycode 的運作原理:
Punycode 是一種 bootstring 編碼,用於將 Unicode 字串轉換為 ASCII。它會將 ASCII 與非 ASCII 字元分開,然後僅使用 ASCII 編碼 Unicode 字元的位置與數值。
範例:
"münchen" → xn--mnchen-3ya
為什麼要使用 Punycode:
- >國際化網域名稱(IDN)
- >DNS 系統中的 Unicode
- >包含 Unicode 的電子郵件地址
- >與舊系統的相容性
- >跨系統互通性
>> 常見問題
什麼是 Punycode?
Punycode 是一種編碼語法,用來將 Unicode 字元轉換為 ASCII,以便在國際化網域名稱(IDN)中使用。透過它,網域名稱可以包含非 ASCII 字元。
為什麼 Punycode 會使用 "xn--" 字首?
"xn--" 字首用來標示該網域標籤是使用 Punycode 編碼。它代表「ASCII Compatible Encoding」,用來避免與一般 ASCII 網域混淆。
網域名稱可以使用表情符號嗎?
可以,表情符號可以透過 Punycode 進行編碼。例如 😊.com 會被編碼為 xn--e28h.com。但並非所有註冊商都支援表情符號網域。
Punycode 只用在網域上嗎?
Punycode 主要是為網域名稱設計,但也能將任意 Unicode 文字編碼成 ASCII。常見用於 IDN 與國際化電子郵件地址。
其他語言
參考資料
我們如何確保結果正確
我們使用以下自動化測試驗證此工具。下方保留測試案例的原始名稱,方便查看實際斷言及重現。
- 驗證方法
- 逐個比較國際化域名標籤的 ASCII 和 Unicode 雙向結果,包含中文、重音和 emoji。
- 對比依據
- Node.js node:url 的 domainToASCII / domainToUnicode。
- 驗證範圍
- 覆蓋列出的標籤;不宣稱實現了全部 UTS #46 映射和域名註冊規則。
測試原始碼與案例(點選檔名檢視)
-
legacy-reliability.test.js
- Punycode: IDN labels agree with Node URL domainToASCII and domainToUnicode
這些測試涵蓋列出的樣本和邊界,不代表所有輸入都已證明正確。往返測試和使用同一依賴套件的檢查,不屬於獨立交叉驗證。