使用方法
- 选择“编码”把文本转换为二进制,或选择“解码”把二进制还原为文本。
- 输入或粘贴文本或二进制数字,也可以打开文件,结果会随输入实时更新。
- 为 8 位分组选择分隔符:空格、无、逗号或换行。
- 如果文本不是 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.is | 01000010 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 位,请用空格或逗号把它们隔开,这样解码器才能知道每个字节在哪里结束。
文本转二进制和数字转二进制一样吗?
我的文本会被上传吗?
不会。转换完全在浏览器中进行,你输入的文本和打开的文件都不会离开你的设备。