文本与二进制互转

把文本逐字节翻译成由 0 和 1 组成的二进制代码,每个字节 8 位;也可以把二进制还原为可读文本。支持 UTF-8 及多种其他字符集。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 选择“编码”把文本转换为二进制,或选择“解码”把二进制还原为文本。
  2. 输入或粘贴文本或二进制数字,也可以打开文件,结果会随输入实时更新。
  3. 为 8 位分组选择分隔符:空格、无、逗号或换行。
  4. 如果文本不是 UTF-8,请切换“文本编码”,然后复制或下载结果。

文本是如何变成二进制的

计算机以字节形式存储文本。UTF-8 等文本编码会把每个字符映射为一个或多个字节,而每个字节都是 0 到 255 之间的数字,用二进制表示最多需要 8 位。本工具把每个字节固定写成 8 位并保留前导零,这样每组宽度相同,解码时不必猜测字节之间的边界。

在 UTF-8 中,英文字母、数字和标点各占 1 个字节,每个字符对应一组 8 位;其他字符则更长:é 等带重音的字母占 2 个字节,大多数汉字和日文字符占 3 个字节,emoji 占 4 个字节,也就是 32 位。如果希望每个汉字只占 2 个字节,可以在“文本编码”中选择 GBK;西欧文字可以选择 ISO-8859-1 或 Windows-1252,每个字符只占 1 个字节。

把二进制翻译回文本

在“解码”模式下,可以粘贴用空格、逗号或换行分隔的二进制分组。分隔开的分组可以省略前导零,因此按 7 位输出 ASCII 的工具生成的结果也能识别。没有分隔符的连续 0 和 1 会按每 8 位切分,所以总长度必须是 8 的倍数。其他字符或大于 11111111(255)的分组会连同位置一起报错。

得到的字节会按所选的文本编码解读。请选择生成二进制时使用的编码,或把输出切换为“十六进制”查看原始字节。

在代码中把文本转换为二进制

# Python
' '.join(f'{b:08b}' for b in 'Hi'.encode())      # '01001000 01101001'
bytes(int(g, 2) for g in '01001000 01101001'.split()).decode()   # 'Hi'

// JavaScript
[...new TextEncoder().encode('Hi')]
  .map(b => b.toString(2).padStart(8, '0')).join(' ')   // '01001000 01101001'

编码规格

字母表0 1
输出体积每字节 8 位数字(800%)
填充无
标准二进制位值表示
区分大小写否

编码示例

输入 (UTF-8)输出
Hello, World!01001000 01100101 01101100 01101100 01101111 00101100 00100000 01010111 01101111 01110010 01101100 01100100 00100001
Base64.is01000010 01100001 01110011 01100101 00110110 00110100 00101110 01101001 01110011
你好11100100 10111101 10100000 11100101 10100101 10111101

常见问题

一个字符是多少位?

ASCII 字符以及 UTF-8 中的英文字母都是 1 个字节,即 8 位。UTF-8 中的其他字符占 16、24 或 32 位,常用汉字一般是 24 位。UTF-16 中每个字符至少占 16 位。

没有空格的二进制可以转换成文本吗?

可以,只要它是由完整的 8 位分组连在一起组成的。如果分组省略了前导零、不足 8 位,请用空格或逗号把它们隔开,这样解码器才能知道每个字节在哪里结束。

文本转二进制和数字转二进制一样吗?
不一样。本工具是把文本的每个字节分别转换。如果要把单个数字(例如 1000)转换为二进制,请使用进制转换器。
我的文本会被上传吗?

不会。转换完全在浏览器中进行,你输入的文本和打开的文件都不会离开你的设备。