先辨认拿到的是订阅地址、分享链接列表,还是完整内核配置,再选择导入入口。本文适合遇到“解码后为什么还是链接”“JSON 为什么不能直接当订阅”的用户:从 v2rayN 的订阅分组与剪贴板导入开始,说明 Base64 编解码、节点导出和原生 JSON 的转换边界,并给出本地处理与报错排查方法。
三种格式的区别:订阅负责分发,JSON 负责运行
先分清“获取地址”和“返回内容”。订阅地址通常是带访问凭据的 HTTPS URL,客户端访问后才取得节点数据。Base64 订阅是常见的返回内容格式,不是代理协议,也不意味着所有订阅都采用同一种编码。把订阅地址本身做 Base64 解码,通常得不到节点。
| 材料 | 常见结构 | 导入用途 |
|---|---|---|
| Base64 订阅正文 | 多条分享链接按行排列,再整体编码 | 通过订阅更新批量取得节点 |
| 分享链接 | vmess:// 或 vless:// 等协议前缀 | 通过剪贴板导入节点参数 |
| 原生 JSON 配置 | inbounds、outbounds、routing 等字段 | 交给匹配的内核运行 |
分享链接主要描述一个远端连接:地址、端口、身份凭据、传输方式及 TLS 参数。完整 JSON 还可以包含本地监听、DNS、分流规则和多个出站。因此,节点能够导出为分享链接,不等于整套运行配置能够完整装进链接。
Base64 解码:先解外层,再识别协议
传统 Base64 订阅可以理解为两层结构:外层把整份链接列表编码,内层每一行仍然遵循各自协议的分享格式。去掉外层后,看到 vmess:// 很正常;不要继续对所有链接使用同一种解码规则。
- VMess 常见分享格式:
vmess://后面是 Base64 编码的 JSON,常见字段包括add、port、id、net、tls。 - VLESS 常见分享格式:
vless://后面是 URI 结构,身份信息、主机和端口位于主体,传输参数放在查询串中;它不是一整段 Base64 JSON。 - 名称与字符集:中文备注需要正确处理 UTF-8;URI 片段中的百分号编码与 Base64 是两套不同规则。
- 编码变体:有些内容采用 URL 安全字符
-、_,或省略末尾的=,解码工具需要先规范化。
下面的 JavaScript 仅演示本地 UTF-8 编解码。输入 节点 时,编码结果为 6IqC54K5;这是一段字符测试,不是可连接的节点。处理真实订阅时,只在可信的本地环境中操作,不要把含令牌的内容提交到在线转换服务。
function decodeBase64Utf8(input) {
let value = input.trim().replace(/\s+/g, "")
.replace(/-/g, "+").replace(/_/g, "/");
value = value.padEnd(Math.ceil(value.length / 4) * 4, "=");
const bytes = Uint8Array.from(atob(value), char => char.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);
}
console.log(encodeBase64Utf8("节点")); // 6IqC54K5
console.log(decodeBase64Utf8("6IqC54K5")); // 节点
解码成功只代表编码层可读。结果如果是登录页面、到期提示或其他 HTML,就没有得到有效节点列表。此时继续编码或换扩展名不会修复订阅,需要回到订阅地址和访问权限检查。
v2rayN 导入:订阅地址与剪贴板分开处理
需要后续更新节点时,优先添加订阅分组;只拿到一条或多条分享链接时,使用剪贴板导入。以下按 v2rayN 中文界面的菜单名称说明,不同桌面界面可能调整按钮位置,括号与空格也可能略有差异,应以实际菜单为准。
辨认输入
HTTPS 获取地址用于订阅分组;以
vmess://、vless://开头的内容用于节点导入。不要把完整 JSON 粘贴进订阅地址栏。添加分组
打开「订阅分组」→「订阅分组设置」,新增分组,填写备注和订阅地址,保存。地址中的查询参数与访问令牌需要完整保留。
更新订阅
在「订阅分组」菜单选择「更新全部订阅(不通过代理)」。若直连请求失败,且已有可用代理连接,再尝试「更新全部订阅(通过代理)」,查看更新日志中的结果。
导入链接
对于分享链接,先复制完整文本,再打开「服务器」→「从剪贴板导入批量URL」。多条链接按行排列;常见桌面界面也可用
Ctrl+V执行剪贴板导入。检查参数
打开导入后的节点编辑窗口,核对地址、端口、传输协议及 TLS 设置。导入成功不代表连接可用,随后查看核心日志,确认是否存在字段不支持或握手失败。
安卓端也需要区分这两种入口:v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核。能读入同一份链接列表,不代表两者都支持其中每一种传输参数。尤其遇到 VLESS、REALITY 等组合时,应先确认目标客户端及内核支持情况,而不是反复改变 Base64 外层。
分享链接与原生 JSON:哪些能转,哪些会丢
分享链接转 JSON 的本质是字段映射,不是把文本外面加一对大括号。客户端读取链接,建立节点记录,再按所选内核生成运行配置。反向导出时,通常只能取出某个出站对应的连接参数,不能自动携带整套 DNS、路由与本地监听。
保留原始订阅
推荐保存获取地址并用订阅分组更新,能够继续接收远端节点变更。订阅令牌需要按访问凭据保护。
适合:日常维护多个节点、需要持续更新
导出分享链接
在节点列表选中记录,通过右键菜单中的分享 URL 导出项复制到剪贴板。得到的是节点快照,不会附带原订阅的更新关系。
适合:临时迁移少量节点、检查连接字段
保留完整 JSON
保留多个出站、路由标签和 DNS 设置,交给对应内核读取。跨内核使用前需要核对字段语义,不能只改文件名。
适合:自定义分流、固定本地入站配置
转换前先备份完整配置
若迁移目标只是节点连接,导出分享链接即可;若还要保留 DNS 与分流,另存原生 JSON,并逐项检查目标内核支持的字段,不要用链接导出替代配置备份。
下面是一份结构演示配置,只包含监听 127.0.0.1:10808 的 SOCKS 入站与直连出站,不包含远端代理服务器,也不应作为代理节点导入。它说明完整 JSON 可以根本没有可转换成 VMess 或 VLESS 链接的对象。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
]
}
确实需要加载完整配置时,使用 v2rayN「服务器」→「添加自定义配置服务器」这类专用入口,按界面选择配置文件和匹配内核。自定义配置中的监听端口可能与现有实例冲突;日志出现地址已被占用时,先停止冲突实例或调整端口,而不是修改节点身份信息。
把链接列表重新编码为订阅正文
已经导出多条分享链接时,可以按“一行一个链接”的方式组成文本,再对整个 UTF-8 文本进行 Base64 编码。这能生成传统订阅正文,但不会自动生成可更新的订阅地址。地址仍需要一个可信的 HTTPS 服务返回这份正文。
- 保留每条链接的协议前缀、查询参数与备注,不要手动删掉看似重复的 TLS 或传输字段。
- 使用换行符
\n连接各条链接,不要插入项目符号、引号、JSON 数组括号或表格分隔符。 - 对完整文本编码一次;不要把每条完整分享链接先单独编码,再拼成另一份无法识别的列表。
- 本地解码一次,确认能逐行还原原文,再用目标客户端试导入。核对节点数量和关键字段,而不只看成功提示。
从完整 JSON 批量提取链接时,还要处理多个出站、标签引用和传输字段映射。目标分享格式无法表达的字段必须另行记录。转换工具输出了链接,只能说明完成了部分序列化,不能证明与原配置行为一致。
导入失败排查:先检查内容,再检查内核
解码后为什么还是 vmess://?
这说明外层订阅编码已经去掉。将这些链接按行复制,使用「服务器」→「从剪贴板导入批量URL」。如果只是查看 VMess 字段,再单独解码该链接前缀后面的部分,不要把整行连同前缀一起解码。
导入提示成功,列表却少了几个节点?
先将解码后的非空链接行数与实际导入数量对照,再查看失败行的协议前缀和字段。某些记录可能因重复、格式错误或协议不支持而未新增;不要仅凭数量下降判断订阅损坏。
JSON 能打开,为什么客户端不接受?
能被 JSON 解析器读取,只表示语法有效。先检查顶层是否有 inbounds、outbounds,再确认是否使用自定义配置入口及匹配内核。VMess 分享数据中的 add、id 不能直接当作完整运行配置。
更新订阅时返回 403 或超时怎么办?
403 通常需要检查授权、令牌或服务端访问策略;超时则检查网络与解析。保留原始地址全部参数,已有可用节点时尝试「更新全部订阅(通过代理)」。若响应实际为错误页面,重新编码该页面没有意义。
排错时固定顺序:先确认订阅请求取得有效正文,再确认分享链接能解析,最后检查运行内核与连接参数。把“下载失败”“格式不支持”“连接失败”分开记录,才能避免在错误的层级反复转换。