上传文件
  1. base64hub
  2. 文本工具
  3. Base64 转 UTF-16

Base64 转 UTF-16:解码 UTF-16LE 和 BE 文本

粘贴含 UTF-16 文本的 Base64,即可作为普通字符串阅读。页面默认使用 UTF-16LE,这是 Windows 和 .NET 的默认编码;如果输出变成一串汉字,请切换到 UTF-16BE。

免费 无需注册,不限次数 本地 不上传任何内容 更新于 2026年10月27日
输入 0 B输出 0 B大小 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何将 Base64 解码为 UTF-16

  1. 把 Base64 粘贴到 输入 · Base64。字符集 已预设为 UTF-16LE。
  2. 在 输出 · 文本 中查看结果。看起来像 一栏通常会显示“二进制”,因为检测器把零字节视为二进制数据的特征;文本输出本身仍然是正确的。
  3. 如果结果是一串类似汉字的字符,把 字符集 切换为 UTF-16BE。
  4. 如果数据以字节序标记开头,自动检测 会选出正确的字节序并去掉该标记。
  5. 复制输出 复制文本;下载 保存原始字节。

反方向的转换请使用 UTF-16 转 Base64。

如何在 Base64 中认出 UTF-16

UTF-16 的 Base64 有明显的节奏感。UTF-16 中的 ASCII 文本是字母字节和零字节交替出现,而零比特在 Base64 字母表中对应 A,所以每隔几个字符就会出现一个 A:

Base64字节序解码结果
SABlAGwAbABvAA==LE,无 BOMHello
AEgAZQBsAGwAbw==BE,无 BOMHello
//5IAGkALE,BOM 为 FF FEHi
/v8ASABpBE,BOM 为 FE FFHi
RwBlAHQALQBEAGEAdABlAA==LE,无 BOMGet-Date

大端序的 ASCII 文本总是以 A 开头,因为它的第一个字节是零。以 //4 或 /v8 开头的字符串带有字节序标记。

字节序、BOM 与自动检测

如果用错误的字节序读取,每对字节都会颠倒,英文就变成了汉字:AEgAZQBsAGwAbw== 按 UTF-16LE 解码得到 䠀攀氀氀漀。数据并没有丢失,切换 字符集 就能恢复。

数据以 BOM 开头时,自动检测 能可靠地识别 UTF-16。没有 BOM 时,UTF-16 中的纯 ASCII 文本同样是有效的 UTF-8(零字节在 UTF-8 中是合法的),因此自动检测可能把它误判为带不可见字符的 UTF-8。在本页上,除非开头是 //4 或 /v8,否则请手动保持选择 UTF-16LE 或 UTF-16BE。

字节数为奇数说明有问题。SABpAAA= 有 5 个字节,按 UTF-16LE 解码得到 Hi 和末尾的一个 �。要么值被截断了,要么它根本不是 UTF-16。

UTF-16 的 Base64 从哪里来

最常见的来源是 PowerShell。类似 powershell -enc SQBFAFgA... 的编码命令会出现在计划任务、安装脚本和安全日志中,其中的 Base64 一律是 UTF-16LE。PowerShell EncodedCommand 解码器 能从完整命令行中提取该值,并继续查找脚本里的其他 Base64。

其他来源包括调用 Convert.ToBase64String(Encoding.Unicode.GetBytes(...)) 的 .NET 程序、Windows 注册表和事件数据,以及以二进制形式导出的 SQL Server NVARCHAR 值。

在代码中解码 UTF-16 的 Base64

import base64

raw = base64.b64decode("SABlAGwAbABvAA==")
raw.decode("utf-16-le")                           # 'Hello'
base64.b64decode("/v8ASABp").decode("utf-16")     # 'Hi', byte order taken from the BOM

字节数为奇数时,Python 会抛出 UnicodeDecodeError: truncated data。

// Node.js: little-endian only
Buffer.from("SABlAGwAbABvAA==", "base64").toString("utf16le");   // "Hello"
// Browsers and Node.js: either order
new TextDecoder("utf-16be").decode(Uint8Array.from(atob("AEgAZQBsAGwAbw=="), c => c.charCodeAt(0)));   // "Hello"

在 C# 中,Encoding.Unicode.GetString(Convert.FromBase64String(s)) 按 UTF-16LE 读取,Encoding.BigEndianUnicode 则按大端序读取。另请参阅 Python 和 Node.js。

常见问题

怎么判断 Base64 里是不是 UTF-16?

看是否有大量按固定规律出现的 A,例如 SABlAGwAbABvAA==:在 UTF-16 中,每个 ASCII 字母旁边都有一个零字节。开头是 //4 或 /v8 的,说明带有 UTF-16 字节序标记(BOM)。

为什么解码后出现一堆汉字?

字节序反了。大端序的 Hello 按小端序读取,就会变成 䠀攀氀氀漀。在“字符集”中切换 UTF-16LE 和 UTF-16BE 即可。

为什么文本末尾有一个 �?

UTF-16 的字节数必须是偶数。字节数为奇数,说明 Base64 被截断了,或者根本不是 UTF-16,多出的那个字节就变成了替换字符。

怎么解码 PowerShell 的 -EncodedCommand?

-EncodedCommand(或 -enc)后面的值是 UTF-16LE 的 Base64,本页可以直接解码。PowerShell 解码器 还能接受整条命令行,并找出嵌套的载荷。