Punycode 是一種標準編碼方式,能將 Unicode 網域標籤轉換成僅含 ASCII 的字串,以便在全球域名系統(DNS)中儲存與解析。當你輸入含有非 ASCII 字元的網域時,例如「bücher.de」或「中文.com」,瀏覽器或應用程式必須先將每個標籤轉成對應的 Punycode 形式(例如「bücher.de」會變成「xn--bcher-kva.de」)。這個轉換過程對使用者來說是隱形的,但對 DNS 而言不可或缺,因為 DNS 僅接受範圍在 U+0020 到 U+007E 之間的 ASCII 字元。Punycode Converter 工具讓你直接在瀏覽器中手動進行雙向轉換,無需上傳任何資料。

想像你剛註冊了「café.example」這個網域。在設定 DNS 紀錄或將網域送交不原生支援 IDN 的註冊機構之前,你需要先取得 Punycode 形式。你可以不必安裝命令列工具,也不必依賴可能會記錄你輸入內容的第三方網站,直接使用 Punycode Converter 即可。此工具會在每個句點處切開網域,僅對含有 Unicode 的標籤套用 RFC 3492 演算法,並在每個結果前加上「xn--」前綴。ASCII 後綴「.example」則保持不變。這讓流程可預測且符合 IDNA2008 標準。

convert domain to punycode
convert domain to punycode

什麼時候需要將網域轉成 Punycode

通常你會在三種情境下需要 Punycode:

  • 向要求 ASCII 相容形式的註冊商註冊國際化網域名稱。
  • 在不接受 Unicode 標籤的系統中設定 DNS 紀錄(A、MX、CNAME)。
  • 與同事或服務共用網域,而這些對象僅接受純 ASCII 輸入,例如舊式電子郵件閘道或內部腳本。

在上述每種情況下,Punycode Converter 都會提供 DNS 解析器實際使用的精確字串,讓你能直接複製到表單或設定檔中。

Punycode 在標籤層級如何運作

Punycode 將網域名稱的每個段落(句點之間的每一部分)視為獨立標籤。只有含有非 ASCII 字元的標籤會被轉換;ASCII 標籤則原封不動通過。該演算法會將 Unicode 碼位壓縮成一串 ASCII 字母與數字,再於結果前加上「xn--」前綴。這個前綴是保留字串,用來告訴 DNS 軟體此標籤採用 Punycode 編碼。例如:

Unicode 標籤 Punycode 標籤
café xn--caf-dma
bücher xn--bcher-kva
中文 xn--fiq228c
example example(不變)

此轉換是可逆的:同一套演算法也能將「xn--fiq228c」解碼回「中文」。Punycode Converter 支援雙向處理,因此你可以任選一種格式來檢視或編輯網域名稱。

逐步將網域轉換為 Punycode

  1. 在瀏覽器中開啟 Punycode Converter
  2. 將完整網域名稱(例如 café.example)貼到輸入欄位中。不要包含通訊協定(http://)或路徑(/page)。
  3. 選擇方向:「Unicode → ASCII(Punycode)」。
  4. 點擊「Convert」。工具會分別顯示每個標籤,列出原始 Unicode 與轉換後的 Punycode。
  5. 檢視輸出結果:Unicode 標籤「café」會變成「xn--caf-dma」,而「example」則保持「example」。完整的 Punycode 網域為 xn--caf-dma.example
  6. 將完整的 Punycode 網域(包含未變動的後綴)複製到剪貼簿。
  7. 將其貼到註冊商的 DNS 設定頁面,或任何其他需要僅含 ASCII 之網域名稱的系統中。

常見陷阱與避免方法

搞混標籤邊界是最常見的錯誤。Punycode 轉換是以個別標籤為單位進行,而非以整個網域為單位。如果你貼上 café.example.com,只有「café」這個標籤會被轉換;「example」與「com」會保持原樣。絕不要嘗試將整個字串視為一個單位進行轉換——務必在句點處切開。

另一個風險是看似相同但實際不同的字元。有些 Unicode 碼位看起來與 ASCII 字母相同,實際上卻是不同的字元。例如,西里爾字母「а」(U+0430)看起來與拉丁字母「a」(U+0061)一模一樣。轉換後,兩者都會變成 Punycode,但解析到的是不同的網域。請務必使用 DNS 查詢工具或註冊商的預覽功能驗證 Punycode 結果,以確認其指向預期的網站。

最後,請記住 Punycode 是不分大小寫的。轉換器輸出的字串為小寫,但 DNS 將「XN--CAF-DMA」與「xn--caf-dma」視為相同。為避免在腳本或日誌中造成混淆,請一律使用小寫。

Punycode Converter 如何保護你的隱私

Punycode Converter 完全使用 JavaScript 在瀏覽器中執行。不會將任何資料傳送到伺服器,因此你的網域名稱會保持私密。這在處理你不希望暴露給第三方服務的內部或尚未公開的網域時尤其重要。此工具也不會儲存 cookie 或本機儲存空間,因此每次使用都是全新開始。如果你需要轉換敏感的網域,甚至可以在載入頁面後中斷網路連線——轉換功能仍可離線運作。

超越網域:Punycode 編碼的其他用途

雖然網域是最常見的使用情境,Punycode 也能用於編碼其他必須塞進僅含 ASCII 之系統的識別碼。電子郵件的本機部分(@ 之前的部分)若郵件伺服器支援 SMTPUTF8,便可使用 Punycode。部分憑證授權單位接受 SSL/TLS 憑證中使用 Punycode 編碼的通用名稱。由於採用同一套 RFC 3492 演算法,Punycode Converter 也能協助你準備這些值。

Punycode 在更廣泛編碼領域中的定位

Punycode 是許多在 Unicode 與 ASCII 之間搭橋的編碼方式之一。如果你也處理其他格式,可能還會用到 Base64 來處理二進位資料、URL 編碼 來處理查詢字串,或 HTML 實體 來處理網頁內容。各自用途不同:Base64 處理任意位元組,URL 編碼對 URL 中的特殊字元進行跳脫,HTML 實體則在 HTML 文件中表示字元。Punycode 專門用於網域標籤,也是唯一使用「xn--」前綴的編碼方式,因此在 DNS 環境中一眼就能辨識。

驗證你的 Punycode 轉換結果

將網域轉換為 Punycode 後,請花兩分鐘進行驗證:

  1. 使用 DNS 查詢工具(例如 dig 或線上 DNS 檢查工具)查詢 Punycode 網域,確認它解析到預期的 IP 位址。
  2. 查看註冊商的 WHOIS 輸出,確認網域已正確以 Punycode 形式註冊。
  3. 在瀏覽器中開啟該網域,驗證 Unicode 版本是否依你的設定正確地重新導向到 Punycode 版本,或反向運作。

這些步驟能及早發現錯誤,避免連結失效或憑證設定錯誤。

延伸閱讀:免寫程式,數分鐘內將 ASCII 檔案轉為 Excel

相關閱讀:將表情符號轉為 Punycode 以用於 IDN 網域標籤