訂閱網址用來取得內容,Base64 用來編碼文字,分享連結描述單一節點,原生 JSON 則描述核心執行設定。本文適合遇到「訂閱有內容卻無法匯入」、「JSON 不能轉成連結」等問題的使用者:先辨識輸入格式,再離線解碼,最後透過用戶端產生設定並核對欄位,避免轉換時遺漏路由、DNS 或安全性參數。
一、先分清訂閱網址、訂閱內容與節點設定
以 https:// 開頭的訂閱網址只是取得內容的入口,不代表回應一定採用特定格式。伺服器可能回傳 Base64 文字、逐行排列的分享連結,也可能回傳特定用戶端專用的設定。要判斷能否匯入,應查看下載的內容,而不是網址副檔名是否為 .txt 或 .json。
常見的 Base64 訂閱會將「多個節點分享連結以換行符號串接後的全文」編碼。內容通常有兩層編碼:外層編碼整份清單,內層則可能是每條 vmess:// 後方的節點 JSON。解開外層不會自動得到完整的核心設定。Base64 是可逆編碼,不具備保密功能。
| 項目 | 常見形式 | 包含內容 | 處理方式 |
|---|---|---|---|
| 訂閱網址 | 以 https:// 開頭 | 遠端資源位置,可能包含存取權杖 | 訂閱群組設定 |
| Base64 訂閱內容 | 較長的編碼文字 | 通常是編碼後、逐行排列的分享連結 | 更新訂閱或先離線解碼 |
| 分享連結清單 | vmess://、vless:// | 一個或多個節點的連線參數 | 從剪貼簿匯入 |
| 原生 JSON | 包含 inbounds、outbounds 等鍵 | 入站、出站,以及選用的 DNS、路由設定 | 自訂設定入口 |
判斷方式:先看內容,再選匯入入口
內容若已是逐行排列的分享連結,就不要再次解碼;若包含完整的入站與出站結構,就不要當成訂閱網址新增。若回傳的是登入頁面或錯誤頁面,應先排除訂閱存取問題,而非繼續轉換。
二、VMess 與 VLESS 分享連結如何表示參數
常見的 vmess:// 分享格式會將描述單一節點的 JSON 編碼後,接在協定標頭後方。解碼後常見欄位包括 add、port、id、net、host、path 和 tls。這裡的 JSON 屬於分享格式,並非可直接交由核心執行的原生 JSON。
以下是用來說明結構的 VMess 節點描述。位址與 UUID 都是文件範例,並不對應可連線的服務;v: "2" 是這類分享格式的版本標記,不是用戶端版本。現代 VMess 節點通常使用 aid: "0",實際值仍應以伺服器設定為準。
{
"v": "2",
"ps": "範例-VMess-WS",
"add": "example.com",
"port": "443",
"id": "123e4567-e89b-42d3-a456-426614174000",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/proxy",
"tls": "tls",
"sni": "example.com"
}
VLESS 分享連結通常採用 URI 格式。使用者名稱欄位存放 UUID,主機與連接埠代表連線目標,查詢參數描述傳輸與安全性設定,井字號後方則是節點備註。以下範例使用 WebSocket 與 TLS,不包含額外的流控參數。
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fproxy&sni=example.com#範例-VLESS-WS
security=tls表示傳輸安全層使用 TLS;encryption=none是 VLESS 的協定參數,兩者並不衝突。host在此代表 WebSocket 請求的 Host;sni則用於 TLS 交握。兩者用途不同,即使範例中的值相同,轉換時也不能互相替代。path=%2Fproxy解碼後為/proxy。路徑包含問號、井字號或空格時,應依 URI 規則編碼參數,不可直接串接。#後方的備註不會改變連線方式。中文備註應使用 UTF-8 與百分比編碼,以減少不同匯入工具之間的解讀歧異。
三、離線解碼與重新編碼 Base64 訂閱
處理實際訂閱時,應將訂閱網址、UUID 和解碼後的內容都視為敏感資料。不要將它們提交至不熟悉的線上轉換網站。可以在本機空白頁面的瀏覽器開發者工具中執行檢查過的程式碼;操作前請確認頁面沒有其他指令碼讀取輸入內容,並留意開發者工具可能保留操作紀錄。
以下函式只會在本機轉換字串,不會發出網路請求。解碼函式相容常見的標準 Base64 與 URL 安全字元,可處理編碼文字中的換行,並補上缺少的尾端等號。若輸入內容本身不是 Base64,仍應檢查來源,不要靠反覆編碼、解碼碰運氣。
function decodeBase64Utf8(input) {
const normalized = input.trim()
.replace(/\s+/g, "")
.replace(/-/g, "+")
.replace(/_/g, "/");
if (normalized.length % 4 === 1) {
throw new Error("Base64 長度不合法");
}
const padded = normalized.padEnd(
Math.ceil(normalized.length / 4) * 4, "="
);
const bytes = Uint8Array.from(atob(padded), c => c.charCodeAt(0));
return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
}
function encodeBase64Utf8(text) {
const bytes = new TextEncoder().encode(text);
let binary = "";
for (const byte of bytes) binary += String.fromCharCode(byte);
return btoa(binary);
}
將原始訂閱內容作為字串傳入 decodeBase64Utf8,確認解碼結果是否逐行顯示協定標頭。若要產生傳統 Base64 訂閱,應先整理有效的分享連結,再呼叫 encodeBase64Utf8(links.join("\n"))。不要對整份清單執行 URL 解碼,否則節點參數中原本已編碼的分隔符號可能會被提前還原。
- 移除文字開頭可能存在的位元組順序標記,依
\r?\n分行,並刪除空白行。 - 逐行確認協定標頭;錯誤頁面、流量說明與公告文字不應混入節點清單。
- 只有在需要查看 VMess 節點欄位時,才解碼單條連結中
vmess://後方的內容。 - 重新編碼後再反向解碼一次,確認節點行數與中文備註沒有變動,再匯入用戶端測試。
四、透過用戶端匯入、匯出與產生設定
日常移轉時,建議先讓用戶端解析分享連結,再由用戶端產生對應的核心設定。這樣能減少手動填寫欄位時出錯,但仍須核對傳輸參數。v2rayN 桌面版在不同版本中的選單文字可能略有差異,以下依常見選單名稱說明;若找不到完全相同的項目,請尋找功能相同的選項,而不是改用無關的自訂設定入口。
-
備份群組
先記下目前使用中的伺服器與訂閱群組,並保存原始訂閱網址。將測試內容放入獨立群組,避免大量匯入後影響原有使用設定。
-
新增訂閱
在 v2rayN 開啟「訂閱群組」→「訂閱群組設定」,新增群組並填入訂閱網址。返回「訂閱群組」後,執行「更新全部訂閱(不透過代理)」;若該網址需要透過代理存取,則選擇對應的代理更新選項。
-
匯入單一連結
複製完整的分享連結,在「伺服器」→「從剪貼簿批次匯入 URL」中執行匯入。此處只貼上節點連結;本機 JSON 檔案應透過自訂設定功能處理。
-
匯出後核對
選取節點並按右鍵,使用目前版本提供的分享 URL 匯出或複製功能。將匯出的結果重新匯入測試群組,開啟編輯視窗,逐一比對位址、連接埠、UUID、傳輸類型、SNI 與路徑。
-
驗證連線
將測試節點設為目前使用的伺服器,查看核心啟動記錄,再驗證實際請求。只有在用戶端提供「匯出完整設定」或類似功能時,才匯出原生 JSON;複製分享連結不等於匯出執行設定。
Android 版 v2rayNG 常見的操作方式是在主畫面點選「+」→「從剪貼簿匯入」;訂閱網址則在「訂閱群組設定」中新增,再執行更新訂閱。v2flyNG 也應依其介面分別使用訂閱管理與單一節點匯入功能。這兩款 Android 用戶端使用的核心家族不同,成功解析 VLESS 連結不代表具備該連結所需的所有傳輸能力,尤其要確認是否支援 REALITY 等功能。
五、分享連結如何對應至原生 JSON
原生 JSON 的結構取決於目標核心,而非檔案副檔名。完整的執行設定除了遠端節點,也需要本機入站設定與必要的出站選擇。以下提供 Xray 格式的 VLESS、WebSocket、TLS 範例,展示如何對應上文 URI 的欄位。範例位址不可用於實際服務;若本機已有程式使用 10808,請改用未占用的連接埠,並同步修改呼叫端。
{
"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": "example.com",
"port": 443,
"users": [
{
"id": "123e4567-e89b-42d3-a456-426614174000",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"allowInsecure": false
},
"wsSettings": {
"path": "/proxy",
"headers": {
"Host": "example.com"
}
}
}
}
]
}
- URI 中的主機與連接埠對應至
settings.vnext的address、port;UUID 則對應至users[].id。 type=ws對應至streamSettings.network,security=tls則對應至同一層的security。sni對應至tlsSettings.serverName;WebSocket 的 Host 與路徑則放入wsSettings。- 本機監聽位址、入站連接埠與記錄等級取決於執行環境,不會包含在分享連結中。不要將伺服器的
443填成本機 SOCKS 監聽連接埠。
VMess 的出站協定與使用者欄位必須依照 VMess 結構產生,不能只將上述 protocol 改成 vmess 就算完成。若 VLESS 連結使用 REALITY、特定指紋或流控,也必須採用目標核心支援的對應結構,並保留公鑰、短識別碼等必要參數。JSON 語法正確只代表格式合法,不代表核心支援或伺服器參數正確。
六、哪些轉換能保留資訊,哪些不能
「JSON 轉訂閱」常被誤以為只要將檔案做一次 Base64 編碼。實際上至少需要兩個步驟:先從設定中找出可分享的代理出站,轉成用戶端可識別的 URI,再依訂閱接收端的要求進行包裝。若直接編碼完整 JSON,解碼後仍然是 JSON,不會自動變成節點清單。
由用戶端匯出分享連結
建議匯出用戶端已辨識為一般節點的項目,減少欄位對應錯誤。匯出後仍須檢查安全層、傳輸參數與目標用戶端的相容性。
適用情境:移轉單一節點、整理個人節點清單
離線轉換節點欄位
只處理明確支援的協定與參數;遇到不認識的欄位時,應停止處理並記錄。不要為了「成功匯入」而悄悄捨棄流控、SNI 或傳輸設定。
適用情境:核對少量節點、排查編碼與 URI 轉義問題
保留完整原生設定
保留入站、DNS、路由與多個出站之間的關係,並在相容的核心中以自訂設定方式執行。跨核心移轉時,需逐項檢查欄位。
適用情境:複雜分流、鏈式出站、依賴完整執行環境的設定
原生設定可能包含直連出站、封鎖出站、負載選擇與依網域分流的規則。這些內容無法透過單一節點 URI 表達。即使已擷取所有代理伺服器,原本「哪些請求要走哪個出站」的規則也不會隨分享連結一併移轉。節點轉換後可以連線,不代表原有路由策略已經還原。
判斷方式:分開移轉節點與設定
若只需連線至同一台伺服器,請匯出分享連結並逐欄核對;若要保留 DNS、路由或多出站關係,請備份完整設定,再於目標用戶端另外還原執行策略。
七、訂閱轉換常見問題與處理順序
訂閱更新成功,為什麼節點清單還是空的?
先查看回應內容是否真的包含節點。若解碼結果以 HTML 標籤開頭,通常表示取得的是登入頁面或存取錯誤頁面;若內容是原生 JSON,則應使用相符的設定入口。接著檢查群組篩選條件,避免節點已匯入卻被目前檢視畫面隱藏。
Base64 解碼後中文備註變成亂碼,該怎麼辦?
使用 UTF-8 位元組解碼,不要直接將 atob 回傳的位元組字串當成中文文字。可以使用本文的 TextDecoder 方法。若只有 URI 的井字號備註仍顯示百分比編碼,只需對備註部分執行 URI 解碼。
JSON 轉出的連結可以匯入,卻無法連線?
先核對位址、連接埠與 UUID,再檢查 TLS 的 SNI、WebSocket 的 Host 與路徑。若原設定使用 REALITY 或其他特定功能,也要確認目標核心是否支援,且參數完整。不要為了掩蓋轉換遺漏而停用憑證驗證。
原本的中國大陸直連規則怎麼不見了?
分享連結通常只包含單一節點資訊,不會包含完整路由。請回到目標用戶端的路由設定還原分流策略,或使用相容的完整原生設定。檢查預設出站,避免將直連出站誤認為需要匯出的代理節點。
把訂閱網址傳給轉換網站後,該怎麼處理?
若無法確認對方如何保存輸入內容,請在服務提供者的管理介面重設訂閱權杖,再到用戶端更新網址。重設權杖不一定會同步更換現有節點憑證;若節點連結也已外洩,還需依服務提供者提供的方式更換相關憑證。
最後依「輸入格式正確 → 解碼文字正確 → 節點欄位完整 → 核心功能相符 → 實際請求成功」的順序驗收。每次只調整一個環節,並保留轉換前的文字備份。如此一來,遇到匯入失敗、TLS 交握錯誤或分流變動時,就能找出具體遺漏的欄位,而不必反覆更換格式。