编码与格式转换工具箱

ENCODE & CONVERT TOOLBOX本地转换

Base64、URL、HTML 实体、Unicode 转义、时间戳、UUID、SHA 摘要,加上 JSON ↔ YAML 与 JSON → TOML 转换,共 9 个小工具放在同一页里。全部计算在浏览器本地完成,不联网、不上传、不写本地存储;YAML 与 TOML 只做常见子集,遇到锚点、多行块标量、内联表这类结构会直接告诉你「不支持」,不会假装转换成功。

纯本地UTF-8 中文不支持会明说结果可下载
TOOLS

选一个工具

切换工具时各自的输入都留着,切回来还在。

按 UTF-8 处理中文;解码时忽略换行与空格,也接受 URL-safe 的 - 与 _。输出是 Base64 正文,不含 data: 前缀。要存成文件就走「Base64 → 还原成文件下载」。
INPUT

输入

选中的工具决定输入口径,先选方向再填内容。

等待输入。
OUTPUT

结果

出错时这里留空,具体原因写在下面的状态条里。

输入字符0按 UTF-16 长度算
输出字符0结果字符数
输出体积0 B按 UTF-8 字节数算
结果类型—当前工具产出的格式
尚未生成结果。
LIMITS

支持与不支持(能力边界)

先把边界写清楚,比给一个看着成功的结果更省事。

  • Base64:按 UTF-8 处理中文;解码时忽略换行与空格,也接受 URL-safe 的 - 与 _;输出不含 data: 前缀。解出来的字节不是合法 UTF-8 时会提示改用「还原成文件下载」。
  • URL:编码走 encodeURIComponent,解码走 decodeURIComponent;另外给一条 encodeURI 的整段 URL 口径(保留 :/?#&=)。要「只编码参数」,请自己把参数值拆出来逐段编码——本页不替你拆 URL,免得猜错参数边界。
  • HTML 实体:只还原 &、<、>、"、'(含 ')与十进制 / 十六进制数字实体; 、© 这类其余命名实体原样保留,不会被猜着替换。
  • Unicode 转义:按 UTF-16 码元输出,所以 emoji 会变成两个 \uXXXX(代理对),这是正常的;还原时同时接受 \uXXXX 与 \u{XXXXX},十六进制大小写都行。
  • 时间戳:13 位及以上按毫秒、12 位以内按秒;11 位两种口径都说得通,页面会把两种都列出来。反向输入日期时间时按浏览器本地时区解释,只有写明 Z 或 +08:00 才按指定时区算。
  • UUID:v4 随机版本,用 crypto.getRandomValues;环境里没有这个接口时会退回 Math.random 并在状态条说明,那种情况下不要用在安全场景。
  • 摘要哈希:只有 SHA-1 与 SHA-256(WebCrypto 的算法清单里没有 MD5、SHA-3、SM3)。需要 https 或 localhost,见输入区提示。
  • JSON ↔ YAML:只支持对象、数组、字符串、数字、布尔、null、缩进层级、# 注释、- 列表与 key: value。锚点与别名(&name / *name)、合并键 <<、多行块标量(| / >)、内联表 { } 与内联数组 [ ](空的 {} 与 [] 除外)、多文档 ---、标签 !tag、跨行标量一律报「不支持」并给出行号,不会给出半对的结果。
  • JSON → TOML:顶层必须是对象(TOML 没有顶层数组);null 与混合类型数组(如 [1, "a"])表达不出来,会指名报错。输出先写键值、再写子表,所以键的先后顺序可能与你 JSON 里的书写顺序不同。
  • 不做的:XML / HTML 解析、CSV、Protobuf、JWT、二维码、AES 等加解密、MD5、日期本地化格式。{{变量}} 这类模板占位符不是合法的 JSON / YAML,粘贴之前请先换成真实值。
  • 数据去处:不请求任何网络接口、不写 Cookie 与本地存储;关掉页面输入就从内存里没了。读入的文件只在你的浏览器里被读成本地内容。
HOW IT WORKS

怎么用这一页

  1. 选工具左侧点一个工具(Base64、URL、HTML 实体、Unicode、时间戳、UUID、摘要、JSON ↔ YAML、JSON → TOML),切换时各自的输入都会留着。
  2. 选方向有来有回的四个转义工具(Base64 / URL / HTML / Unicode)与 JSON ↔ YAML 先在「方向」里选编码还是解码、JSON → YAML 还是 YAML → JSON。
  3. 填内容把要处理的内容粘进输入框,页面随输入自动转换;摘要工具选 SHA-1 或 SHA-256,UUID 工具填 1–50 的数量。
  4. 取结果右侧给出结果、字符数与体积统计,可一键复制或下载;转换不了时结果区留空,具体原因(含出错行号)写在状态条上。
FAQ

编码与格式转换常见问题

Base64 解码报错是什么原因?

常见三类:内容里有 Base64 字符集以外的符号(只允许 A–Z a–z 0–9 + / =,URL-safe 的 - 与 _ 也接受);内容被截断,去掉填充后长度不是 4 的倍数;字节解出来不是合法 UTF-8(多半是二进制文件)。前两类页面会说明是哪一种,第三类请改用「Base64 → 还原成文件下载」。换行与空格不影响解码,可以整段粘贴。

YAML 提示「不支持」的写法都有哪些?

锚点与别名(&name / *name)、合并键 <<、多行块标量(| 与 >)、内联表 { } 与内联数组 [ ](空的 {} 与 [] 除外)、多文档(---)、标签(!tag)、跨行标量、Tab 缩进与重复键。本页的 YAML 解析只覆盖常见子集:对象、数组、字符串、数字、布尔、null、缩进层级、# 注释与「- 」列表。遇到子集外的写法会给出具体行号,不会硬猜。

JSON 转 TOML 为什么有时直接报错?

TOML 表达力比 JSON 窄:顶层必须是对象(不能是数组);没有 null,值为 null 的字段要么删掉要么改成空字符串 / 0 / false;数组元素类型必须一致,[1, "a"] 这类混合数组无法表示;键值必须写在子表之前,所以页面会先输出键值再输出 [表]。报错会指名是哪个字段,照着改就行。

时间戳按秒还是毫秒?11 位数字怎么办?

页面按位数判断:13 位及以上当毫秒,12 位以内当秒。11 位两种口径都说得通(当秒是 2286 年之后,当毫秒是 1970 年前后),所以会把两种解释都列出来,按数据来源确认即可。反过来填日期时间也能算出时间戳,按浏览器本地时区解释,只有写明 Z 或 +08:00 才与时区无关。

摘要哈希为什么算不出来?

摘要用的是浏览器自带的 WebCrypto(crypto.subtle),它只在 https 或 localhost 下可用:用 http + IP 打开时浏览器不提供这个接口,页面会直接提示而不会给出错误的摘要。另外 WebCrypto 只提供 SHA-1 与 SHA-256,没有 MD5、SHA-3、SM3,本页也不做这些。

内容会被上传吗?

不会。九个工具的计算全部由浏览器里的 JavaScript 完成,不请求任何接口、不写 Cookie 与本地存储;读入的文件也只是在你本地被读成本地内容。关掉页面,输入与结果就随内存释放。

RELATED

编码与格式转换在浏览器本地完成,文件不上传、不落盘。