二进制是计算机存储和传输一切数据的底层形式。每个字符——无论是字母、数字还是 Emoji——都以 0 和 1 的序列存储。本文介绍文本到二进制的转换原理、UTF-8 多字节编码机制,并提供在线工具和代码示例。

在线文本转二进制 →

文本如何转换为二进制

每个字符通过字符编码标准映射为一个数字,再将该数字表示为二进制(2 进制)。现代系统普遍使用 UTF-8,它向下兼容 ASCII 并支持完整的 Unicode 字符集。

ASCII 字符(每个 1 字节)

标准 ASCII 字符(码位 0–127)每个字符恰好对应 1 个字节(8 位):

H = 72  = 01001000
e = 101 = 01100101
l = 108 = 01101100
l = 108 = 01101100
o = 111 = 01101111

“Hello” 的带空格二进制:

01001000 01100101 01101100 01101100 01101111

如何手动解读一个字节

01001000
↑↑↑↑↑↑↑↑
每一位对应 2 的幂次,从右到左:
位置:7  6  5  4  3  2  1  0
值:  0 +64+ 0 + 0 + 8 + 0 + 0 + 0 = 72 = 'H'

UTF-8 多字节字符

UTF-8 采用变长编码,ASCII 范围之外的字符需要 2、3 或 4 个字节:

码位范围字节数
U+0000 – U+007F1 字节(ASCII)
U+0080 – U+07FF2 字节
U+0800 – U+FFFF3 字节(大部分中日韩字符)
U+10000 – U+10FFFF4 字节(Emoji、生僻文字)

示例:

© (U+00A9) = 2 字节:11000010 10101001
中 (U+4E2D) = 3 字节:11100100 10111000 10101101
😀 (U+1F600) = 4 字节:11110000 10011111 10011000 10000000

这就是为什么同样是”一个字符”,产生的 8 位组数量却不同——取决于其在 Unicode 表中的位置。

在线文本转二进制工具

最快的方式——直接在浏览器中转换,无需安装:

打开 ZeroTool 文本转二进制工具 →

  • 粘贴文本 → 二进制实时更新
  • 支持带空格(01001000 01100101…)和连续(0100100001100101…)两种格式
  • 粘贴二进制 → 点击 Binary → Text 还原文本
  • 全部在浏览器内运行,不上传任何数据

代码实现

JavaScript(浏览器)

使用浏览器原生的 TextEncoder API:

function textToBinary(text) {
  const encoder = new TextEncoder(); // 默认 UTF-8
  const bytes = encoder.encode(text);
  return Array.from(bytes)
    .map(byte => byte.toString(2).padStart(8, '0'))
    .join(' ');
}

console.log(textToBinary('你好'));
// 11100111 10111101 10100000 11100101 10100101 10111101

console.log(textToBinary('Hi'));
// 01001000 01101001

二进制还原文本:

function binaryToText(binary) {
  const bytes = binary
    .trim()
    .replace(/\s+/g, ' ')
    .split(' ')
    .map(b => parseInt(b, 2));
  const decoder = new TextDecoder('utf-8');
  return decoder.decode(new Uint8Array(bytes));
}

console.log(binaryToText('11100111 10111101 10100000 11100101 10100101 10111101'));
// 你好

Python

def text_to_binary(text: str) -> str:
    return ' '.join(format(b, '08b') for b in text.encode('utf-8'))

def binary_to_text(binary: str) -> str:
    parts = binary.strip().split()
    return bytes(int(b, 2) for b in parts).decode('utf-8')

print(text_to_binary('你好'))
# 11100111 10111101 10100000 11100101 10100101 10111101

print(binary_to_text('01001000 01100101 01101100 01101100 01101111'))
# Hello

命令行(一行搞定)

python3 -c "
import sys
text = sys.argv[1]
print(' '.join(format(b, '08b') for b in text.encode('utf-8')))
" "你好世界"

带空格 vs 连续格式

格式示例适用场景
带空格01001000 01100101人类可读,每字节独立
连续0100100001100101紧凑,部分协议使用

解码连续格式时,字符串长度必须是 8 的倍数,否则说明二进制不完整或格式错误。

常见应用场景

教学与学习 — 二进制编码是计算机科学的基础概念。把自己的名字转成二进制,能直观感受字符与字节的对应关系。

调试编码问题 — 出现乱码时,查看原始二进制有助于定位问题所在:是编码解码不一致、多字节序列被截断,还是存在 BOM 字符。

CTF 安全竞赛 — 文本与二进制的互转是 CTF 题目中的常见操作,隐藏信息经常以二进制编码出现。

网络协议与文件格式开发 — 理解字符到字节的映射,在设计二进制协议或解析文件格式时至关重要。

二进制与其他编码的对比

编码方式”Hi” 的输出体积可读性
二进制01001000 01101001最大极低
十六进制48 69紧凑中等
Base64SGk=约为原始的 4/3较高
ASCII 十进制72 105紧凑中等

需要文本安全的紧凑编码时,推荐 Base64 工具。需要同时查看十进制、十六进制、八进制时,推荐 ASCII 转换器

小结

  • 文本转二进制:将每个字符按 UTF-8 编码为字节,再将每个字节表示为 8 位二进制。
  • ASCII 字符占 1 字节;Emoji 和大多数中文字符占 2–4 字节。
  • 带空格格式以空格分隔每个字节;连续格式无分隔符。
  • JavaScript 用 TextEncoder / TextDecoder,Python 用 .encode('utf-8')

立即使用文本转二进制工具 →