本文重點

訂閱網址是取得內容的入口,Base64 是文字編碼,分享連結描述單一節點,原生 JSON 則可描述完整的核心執行設定。本文適合遇到「訂閱解析失敗」、「無法匯入 JSON」或需要移轉節點的使用者:先辨認實際回應內容,再拆解欄位,最後在本機完成轉換與連線檢查。

一、訂閱網址、Base64 與 JSON 是不同層次的概念

貼到用戶端的訂閱網址通常是 HTTPS URL。用戶端連線後,才會取得節點清單或設定內容。網址結尾有沒有 .json,並不能決定內容格式;同一個介面也可能依請求參數或用戶端識別資訊回傳不同內容。排查時應查看實際回應,而不是只看檔名。

常見的 Base64 訂閱會先將多條分享連結逐行排列,再把整段 UTF-8 文字以 Base64 編碼。這不會把節點轉成另一種協定,也不具備保密功能。取得內容的人通常可以還原伺服器位址與驗證資訊,因此訂閱網址本身應視為憑證妥善保管。

相容用戶端的連結清單訂閱

推薦

管理多個節點時優先選用。內容可能是明文連結清單,也可能在外層再包一層 Base64;用戶端解析成功後會建立節點項目。

適用情境:日常更新節點、在多台裝置上分別匯入

單一 vmess:// 或 vless:// 連結

描述一種連線設定,適合暫時傳送或逐項排查。通常不包含完整的 DNS、入站與路由規則,也不會自動取得後續變更。

適用情境:手動匯入、比對節點欄位、移轉單一節點

核心原生 JSON 設定

可包含 inbounds、outbounds、routing 與 dns。必須確認目標核心及版本支援相關欄位,不能直接當成一般節點訂閱。

適用情境:固定部署、自訂路由、保留完整執行設定

判斷順序:先辨識內容,再選擇匯入方式

解碼後若是逐行排列的分享連結,請使用節點或訂閱匯入功能;若是含有 inbounds、outbounds 的物件,則先以自訂設定檢查。不要因為兩者都出現 JSON 就使用相同的匯入方式。

二、vmess://:外層 Base64 與內層節點 JSON

常見的 VMess 分享格式是 vmess:// 加上一串 Base64 字串,解碼後會得到節點描述物件。以下展示解碼後的範例。網域和 UUID 僅用於說明結構,不能實際連線;v 的值 "2" 代表分享格式版本,不是核心版本。

{
  "v": "2",
  "ps": "VMess WS 範例",
  "add": "node.example.net",
  "port": "443",
  "id": "e7c3a416-5c9e-4f2b-9d81-73d14a9b8620",
  "aid": "0",
  "scy": "auto",
  "net": "ws",
  "type": "none",
  "host": "node.example.net",
  "path": "/gateway",
  "tls": "tls",
  "sni": "node.example.net"
}
欄位說明檢查重點
add / port連線位址與連接埠範例使用 443;不能把完整的 HTTPS URL 填入位址欄。
id使用者 UUID應與伺服器端一致,並留意前後是否有空白。
aid舊版 alterId 參數目前的部署通常使用 0;不要為了排查問題任意改成舊值。
scyVMess 內容加密選項auto 不等於外層 TLS,兩者屬於不同層次。
net / path傳輸方式與路徑此處使用 WebSocket;/gateway 必須與伺服器端設定一致。
host / sniWebSocket Host 與 TLS 伺服器名稱兩者用途不同,即使範例中相同也不能任意互換。
ps顯示名稱修改顯示名稱無法修復驗證失敗或交握錯誤。

這裡的 JSON 不是可直接交由核心執行的設定。它沒有完整的 outbounds 階層,欄位名稱也採用分享格式的簡寫。轉換成原生設定時,必須將 add 對應到伺服器位址,將使用者資訊放入相應協定的使用者陣列,再分別建立傳輸與 TLS 設定。

三、vless://:UUID、查詢參數與備註的界線

VLESS 分享連結通常採用 URI 結構,而不是將整份 JSON 包進 Base64。以下是 VLESS over TCP + TLS 的教學範例;不使用 REALITY,也未設定 Vision 流量控制。

vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=node.example.net#VLESS%20TLS%20Example

如果取得的是 REALITY 節點,還要逐項檢查連結中的 security=reality、pbk、sid、fp 與 sni。這些參數無法從 UUID 或伺服器位址推算,也不能透過「VMess 轉 VLESS」自動補齊。核心最終產生的欄位應以相應版本為準。

轉換的界線:重新編碼不等於更換協定

可以將現有分享連結打包成 Base64 訂閱,也可以把已知參數整理成 JSON;但將前綴從 vmess 改成 vless,並不會讓伺服器改用 VLESS。要轉換協定,伺服器端必須提供相應的入站設定與驗證資訊。

四、在本機解碼並重新編碼 Base64 訂閱

訂閱內容可能包含存取權杖與有效 UUID。處理實際內容時,建議使用本機文字工具或瀏覽器空白頁面的開發者工具,不要上傳到不明的轉換網站。以下函式只會轉換傳入的字串,不會發出網路請求,也不需要貼上訂閱網址。

function decodeBase64Utf8(input) {
  let text = input.trim().replace(/\s+/g, "")
    .replace(/-/g, "+").replace(/_/g, "/");
  text += "=".repeat((4 - text.length % 4) % 4);
  const bytes = Uint8Array.from(atob(text), ch => ch.charCodeAt(0));
  return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
}

function encodeBase64Utf8(input) {
  const bytes = new TextEncoder().encode(input);
  let binary = "";
  for (const byte of bytes) binary += String.fromCharCode(byte);
  return btoa(binary);
}

const demoLink =
  "vless://[email protected]:443" +
  "?encryption=none&security=tls&type=tcp&sni=node.example.net#Example";

const subscription = encodeBase64Utf8(demoLink + "\n");
console.log(subscription);
console.log(decodeBase64Utf8(subscription));

這段程式碼支援常見的 Base64URL 字元替換,並會補上結尾填充。UTF-8 轉換是為了正確處理中文備註;直接對中文呼叫 btoa() 可能會出錯。執行前請先看懂程式碼,也不建議將實際憑證留在公用裝置的主控台紀錄中。

  1. 取得訂閱的回應本文後,先確認內容是否已以 vmess:// 或 vless:// 開頭。若是明文連結,就不必再解碼外層。
  2. 如果內容是 Base64,先解碼一次,再依換行拆分。移除空行即可,但不要刪除 URI 內的有效字元,也不要改動區分大小寫的路徑。
  3. 對每條 vmess:// 移除前綴後,分別呼叫解碼函式,再用 JSON.parse() 檢查物件結構。
  4. 若要還原成清單訂閱,請用換行符號串接完整的分享連結,再呼叫編碼函式。不要編碼介面上顯示的節點名稱。

如果回應以 <!DOCTYPE html> 開頭,請先檢查登入狀態、網址是否過期,或介面是否回傳錯誤頁面。即使解碼後是合法 JSON,也要進一步判斷它是錯誤訊息、節點陣列還是完整的核心設定。Base64 解碼成功,只能證明內容可以還原,不代表一定能連線。

五、將分享連結整理成 Xray 原生 JSON

以下將前述 VLESS TLS 範例整理成最小執行設定,方便查看各層結構。它會在本機 127.0.0.1:10808 建立 SOCKS 入站,並連線至範例網域的 443 連接埠。該位址沒有可用服務,設定僅供欄位比對;實際執行前須替換成伺服器提供的參數。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.net",
            "port": 443,
            "users": [
              {
                "id": "e7c3a416-5c9e-4f2b-9d81-73d14a9b8620",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "node.example.net",
          "allowInsecure": false
        }
      }
    }
  ]
}

本例沒有另外撰寫 routing,預設會透過第一個出站處理請求,也未提供分流規則集或系統代理設定。啟動 SOCKS 監聽連接埠,不代表系統中的所有應用程式都會自動使用它。若 10808 已被桌面用戶端占用,請先停止重複執行的執行個體或更改連接埠。

轉換方式:區分節點移轉與完整設定移轉

移轉節點:分享連結或清單訂閱
  • 保留位址、連接埠、UUID、傳輸與安全參數。
  • 由用戶端產生本機入站與執行設定。
  • 在目標用戶端分別檢查 DNS 與 routing。
完整部署:原生 JSON
  • 檢查 inbounds 的監聽位址與連接埠是否被占用。
  • 核對出站標籤、路由參照與外部檔案相依項目。
  • 使用相應核心驗證設定,再啟動測試。

從完整 JSON 匯出分享連結時,DNS、路由、多出站選擇與本機監聽設定通常無法一併保留在連結中。

「原生 JSON」也不代表能跨核心通用。Xray 與 V2Fly 共用部分設定結構,但協定功能與欄位演進並不完全相同。例如,含有 REALITY 的 Xray 設定不能只更改檔名就交給 V2Fly 使用。轉換工具應清楚標示輸入格式、輸出核心與參數涵蓋範圍。

六、v2rayN 匯入:分別處理訂閱網址與剪貼簿連結

以下以 v2rayN 7.x 繁體中文介面的常見選單為參考,不同小版本的標點與入口位置可能有所調整。先確認手上的內容是 HTTPS 訂閱網址、單一分享連結,還是完整設定檔,再選擇相應入口。將網頁網址貼到節點匯入視窗,常會出現「沒有有效內容」之類的結果。

  1. 新增訂閱網址:開啟「訂閱群組」→「訂閱群組設定」,新增群組,填入備註及服務提供者給的訂閱 URL,儲存後選取該群組。
  2. 取得節點清單:在「訂閱群組」選單中選擇更新目前訂閱的功能。若可直接連線,先使用不經代理的方式更新;若直連逾時但現有代理可用,再選擇透過代理更新。
  3. 匯入單一連結:複製完整的 vmess:// 或 vless://,選擇「伺服器」→「從剪貼簿匯入批次 URL」。多條連結請逐行排列,並保持每條連結完整。
  4. 匯入完整設定:在伺服器選單中找到自訂設定匯入入口,選取本機 JSON 檔案並指定所需核心。不要預期系統會自動將它拆解成可逐項編輯的一般節點。
  5. 檢查實際運作狀況:將節點設為目前使用項目並重新載入,查看記錄是否出現設定解析、連接埠占用或 TLS 交握錯誤,再實際發出網頁請求。

手動匯入的節點通常只是當下的快照。服務提供者日後更換位址或 UUID,不會自動更新已複製的連結;更新訂閱則可能覆蓋該群組中的節點。需要長期保留的手動修改,建議放在獨立群組,避免與訂閱管理的項目混在一起。

七、訂閱解析與格式轉換常見問題

Base64 解碼成功,為什麼 v2rayN 還是匯入失敗?

先確認解碼結果是否真的是逐行排列的分享連結。若內容是 HTML、錯誤提示或原生設定物件,應改用相應的匯入方式;若是連結清單,先只匯入其中一條,檢查前綴、換行與 UUID,逐步縮小問題範圍。

取得 JSON 檔案後,可以直接重新編碼成訂閱嗎?

單靠編碼無法完成格式轉換。若檔案是完整的核心設定,必須先選定一個出站,依分享格式擷取協定、伺服器、使用者與傳輸參數,再產生連結。直接將整份檔案做 Base64 編碼,通常不會得到用戶端預期的節點清單。

訂閱更新逾時,是格式錯誤嗎?

逾時首先是取得內容階段的問題。請檢查訂閱網址是否完整、網域能否解析,以及目前網路是否能連線;已有可用節點時,再嘗試透過代理更新。只有在取得回應後出現解析錯誤,才需要繼續檢查 Base64 與節點格式。

匯入成功但無法瀏覽網頁,應該修改哪個參數?

先確認目前使用的節點與系統代理狀態,再查看記錄。連線遭拒時,優先檢查位址與 443 等伺服器連接埠;TLS 錯誤則檢查 SNI、憑證與系統時間;驗證失敗則檢查 UUID。不要以啟用略過憑證驗證,取代正確的 TLS 設定。

中文備註出現亂碼,會影響節點連線嗎?

備註通常不影響連線,但亂碼可能表示轉換流程未正確處理 UTF-8。VMess JSON 應先以 UTF-8 編碼,再轉成 Base64;VLESS 的備註與查詢參數則依 URI 規則編碼。不要反覆將整條連結一起編碼,否則冒號、問號與分隔符號也會失去結構作用。

完成格式轉換後,應依序確認:內容能解析、欄位能對應、核心能啟動、請求能通過。保留原始訂閱或設定作為參照,只修改副本。更多欄位結構請參閱設定大全,協定名稱與傳輸術語可對照術語表。