real的二进制位我第一次,它不是在计算机科学课上- 它是在生产bug中,我维护的一个wordpress插件以一种破坏任何非英语字符的方式存储一个短字符串,并且要弄清楚腐败发生在什么地方我必须查看实际字节,我将破碎的字符串粘贴到一个"文本到二进制"框中我在网上找到,拿回了一面由1和0组成的墙,并立即意识到该工具只处理了ascii字符并悄悄地掉落了重音字节它显示给我的字节是一个谎言,我浪费了一个下午去追逐错误的堆栈层。
二进制转换就是这样:它看起来像一个玩具,大多数免费工具都把它当作一个。一个合适的翻译器必须通过UTF-8对人们实际输入的全方位字符进行编码 - 重音、表情符号、中文、阿拉伯语,现代网络的编码运行在上面,它必须将它们解码回字节。我构建 Toolz.dev、WP Adminify 插件,以及相当多的 Laravel 和 React,所以我在文本及其字节表示之间移动的次数比我想象的要多,并且我构建了 二进制翻译 正确地为每个字符进行转换,而不仅仅是简单的 128。
TL;博士: 1个二进制翻译器把文本变成计算机存储的1和0,把那些1和0变回文本,catch是字符编码:ASCII只覆盖128个字符,而真实文本需要UTF-8,其中一个字符可以是一到四个字节 二进制翻译 对完整内容进行编码和解码 统一码 范围 - 包括表情符号 - 完全在您的浏览器中以二进制、十六进制、十进制和八进制形式,并准确告诉您当粘贴无法解码时哪个令牌是错误的。
什么是二进制翻译器,真的吗?
器(binary translator)是人类可读文本和计算机用来存储该文本的数字表示之间的转换器,您键入的每个字符都存储为一个或多个字节- 数字从0到255- 每个字节可以用二进制(以2为基数)、十六进制(以16为基数)、十进制(以10为基数)或八进制(以8为基数)来翻译"Hi"到二进制给出 01001000 01101001;两组八位是"h"和"i"的两个字节。
"翻译"这个词在这里做的是真正的工作,因为涉及到一个翻译表,字节值72并不是固有的意思字母"H"- 意思是"H"只是因为一个字符编码说的基本英文字母、数字和常用标点符号,那个映射是ASCII,一个60年代的标准,给值0到127赋128个字符,ASCII就是为什么"H"是72,空格是32,它是二进制转换中每个人都做对的部分。
问题从值 127 以上开始。世界输入的字符远远超过 128 个不同的字符,处理其余字符的编码(您的浏览器、数据库和 JSON 几乎可以肯定使用的编码)是 UTF-8。一个好的二进制转换器实际上是一个 UTF-8 编解码器,顶部有一个基本转换层。 二进制翻译 完全是这样构建的,这就是为什么它可以往返包含表情符号的字符串并将相同的字符递回。
将文本转换为二进制实际上如何工作?
将文本变成二进制是一个两阶段的管道,理解阶段可以解释工具所做的一切。第一阶段是 将字符编码为字节并且第二个是 在您选择的基站中写入每个字节。
UTF-8生活的地方编码 UTF-8是一种可变长度编码:一个字符如果是普通的ASCII字符,则采用一个字节,大多数拉丁重音字母和许多符号采用两个字节,世界大部分地区采用三个字节's脚本包括中文、日文、韩文,不太常见的字符和表情符号采用四个字节。所以"A"是一个字节,"é"是两个,"中"是三个,一个面部表情符号是四个。编码器穿过字符串,对于基本范围之外的字符,它会产生正确的多字节序列,并带有标记后面有多少字节的前导位。
2阶段是纯算术,一旦你有字节值的列表,用二进制的方式写出来,就是把从0到255的每个数字表示为八位,零填充所以每个字节都是相同的宽度,十六进制将每个字节写成恰好是两个字符(00到ff),这就是为什么十六进制是查看原始数据的紧凑最爱,八进制每字节使用三位数,十进制只是显示纯数 二进制翻译 让您立即在所有四个基站之间翻转,因为底层字节相同 - 仅显示格式发生变化。
翻译器如何将二进制解码回文本?
Decoding反转管道,而且是大多数工具悄然失效的方向,首先工具要 将输入读入字节值那么它必须 将这些字节解码为 UTF-8 返回字符。
读取输入意味着标记化。如果粘贴字节之间有空格的二进制文件,则每组为一个字节。如果粘贴一长串连续的位,工具会将它们分组为八 - 仅当总长度是八的倍数时才有效,因此标记奇数长度而不是默读错误。同样的逻辑适用于十六进制:每个字节两个字符,因此奇数个十六进制数字是一个错误。逗号、空格、制表符和行将所有工作都作为分隔符进行中断,因此您可以粘贴从中复制的任何格式,而无需首先重新格式化。
第二阶段从字节重建字符,这就是 UTF-8's 结构很重要。 0-127 范围内的字节是一个独立字符。具有特定高位模式的字节表示两个、三个或四个字节序列的开始,并且后续的字节必须有自己的延续模式。如果没有 - 因为缺少一个字节,或者序列被切断,或者数据一开始就永远无效 UTF-8 - 二进制翻译 告字节序列不是有效的文本,而不是发出替换字符或垃圾,那诚实是重点:当解码失败时,你想知道数据是错误的,而不是盯着mojibake想知道工具是否坏了。
二进制、十六进制、十进制或八进制 - 我应该使用哪些?
它们都代表相同的字节,因此选择的是谁在读以及它们习惯了什么。每个底座都有一个利基,它是自然拟合的。
| 基地 | 每个字节的数字 | 最好的 | "H"的示例; (72) |
|---|---|---|---|
| 二进制 (2) | 8 | 学习,位级工作,显示精确的结构 | 01001000 |
| 十六进制 (16) | 2 | 查看原始数据、调试、颜色和字节转储 | 48 |
| 小数 (10) | 1,3 | 人性化的字节值,快速参考 | 72 |
| 八进制 (8) | 3 | Unix文件权限,一些遗留系统 | 110 |
Binary是最明确的,也是最好的教学,因为你可以看到每一位,但它很冗长 - 每个字节八个字符加起来很快,16进制是你在实践中实际使用最多的:它很紧凑,它可以干净地映射到每个两个字符的字节,它是格式十六进制编辑器,内存转储和颜色代码都说话,当你只想知道一个字符时,10进制很方便's数值。Octal是一个小众保留,从Unix权限位最熟悉的像 755并且主要是在这里所以工具是完整的。 二进制翻译 4个之间切换,而无需重新输入任何东西,因此您可以并排比较表示。
UTF-8为什么对二进制转换如此重要?
为"文本到二进制"是没有意义的,直到你决定你正在转换什么编码,而对于现代网络来说,答案几乎总是UTF-8。一个只处理ASCII的工具将看起来有效- 它会很乐意转换英文文本- 然后在现实世界数据出现的那一刻背叛你。
考虑重音 "é"。在 UTF-8 中是两个字节, 11000011 10101001、或者 c3 a9 hex。ax 中。一个把每个字符都当作单个 ASCII 字节的工具根本不能表示它;充其量它会丢弃字符,最坏的情况是它产生一个错误的字节。现在考虑一个表情符号,在 UTF-8 中是四个字节。天真的工具会彻底破坏这些。因为 二进制翻译 是真正的UTF-8编解码器,"咖啡馆"产生正确的五个字节,并将这五个字节粘贴回退返回"咖啡馆"确切地。
这不是学术性的,任何触摸国际化内容、用户生成数据或任何带有表情符号的东西的人都会立即击中多字节字符,如果你想要更深层次的背景, Base64 编码指南 cover 相同的字节级思维进行相关编码,理解一个就让另一个点击,简短的版本:字节是通用的,但是字节和字符之间的映射是一个选择,UTF-8是web所做的选择。
二进制翻译器赢得保留的常见用例
学习和教学计算机如何存储文本
Ren们寻找二进制翻译器最常见的原因是理解概念, 打字你的名字, 看它变成字节, 使抽象具体化在某种程度上讲课不能。因为工具显示确切的八位组, 让你切换到十六进制和十进制, 它加倍作为教具的编码和数基是如何联系的。学生可以看到"A"是65, 01000001、和 41 一次性全部采用六角形。
调试编码问题
Zhe就是我伸手去拿的, 当一个字符串被损坏时- 经典"é显示为 ©" mojibake- 最快的诊断方法是看字节, 对损坏的字符串进行编码揭示数据是双编码的, 截断的中字符, 还是被假设编码错误的系统破坏, 看到原始字节就变成了模煳的"字符错误"变成了特定的、可修复的诊断。
使用低级格式和协议
大量技术工作涉及直接读取字节:网络数据包、文件头、二进制协议和嵌入式系统都使用六进制和二进制。能够快速将文本片段转换为其字节表示,或将捕获的六进制字符串解码回可读文本,从而节省持续的上下文切换。六进制视图特别与六进制编辑器和调试器显示的内容对齐。
谜题、CTF 和隐藏消息
Binary和hex是捕获旗帜竞赛,密室逃脱和极客拼图的主要内容,一串1和0是隐藏短消息的常见方法,并且能够粘贴和解码 - 在四个基数中的任何一个,具有连续或间隔输入 - 使这些清晰的错误消息在拼图输入有错字或意外的分隔符时有所帮助。
为什么要在浏览器中而不是在服务器上进行转换?
的 二进制翻译 运行完全客户端。您编码的文本和您解码的字节字符串永远不会离开您的机器,并且一旦页面加载,该工具就会关闭您的连接。这比它首次出现更重要:人们转换的字符串通常是令牌、内部标识符、用户数据片段或捕获的协议字节 - 正是您不应该粘贴到随机服务器的那种东西。浏览器内处理意味着没有服务器可以粘贴到。 在线工具中的数据隐私 指南更充分地阐述了坚持这一点的理由。
二进制转换还与相关编码任务集群并存。 Base64 编码器/解码器 处理用于通过电子邮件和数据 URL 等纯文本通道移动二进制的编码。 URL编码器/解码器 涵盖查询字符串的百分比编码。和 哈希发生器 当您需要指纹而不是可逆表示时,将文本转换为固定长度的摘要。对于更广泛的套件,我在构建时保持打开状态 web开发人员工具包 roundup 是一个很好的起点。
常问问题
如何将文本转换为二进制?
打开二进制翻译器,选择"文本到Binary",保持基数设置为Binary,键入您的文本。每个字符都编码为其UTF-8字节值并显示为8位组,因此"A"变为01000001。输出更新为您键入,可一键复制,您可以切换到十六进制、十进制或八进制,无需重新输入任何内容。
如何将二进制转换回文本?
Select "二进制转Text"并粘贴你的二进制,你可以用空格、逗号或换行分隔字节,或者粘贴连续运行的一段位,只要总长度是八的倍数,工具将这些位分组成字节,解码为UTF-8,以重建原始字符,如果长度错误或字符无效,它会报错。
二进制翻译使用什么字符编码?
UTF-8,现代网页和大多数编程语言所使用的编码,ASCII字符取一个字节,大多数重音字母取两个,许多脚本和所有表情符号取三四个字节,这意味着该工具正确处理的字节远远超过普通英语,不像简单的工具只映射128个ASCII字符。
它也可以转换为十六进制、十进制和八进制吗?
是。一个基选择器在二进制、十六进制、十进制和八进制之间切换输出,解码接受这些基中的任何一个作为输入。十六进制显示每个字节两个字符,八进制三位,十进制纯 0 到 255 值,二进制完整的八位。所有四个都表示相同的底层字节。
Win't我的二进制解码是为什么?
2个最常见的原因,就是不是八的倍数的位长度和对所选基数无效的杂散字符,工具准确地告诉你哪个令牌无效或者长度错误,所以你可以修复一个无效的字节序列UTF-8- 例如被切掉的多字节字符- 也被标记而不是解码成垃圾。
二进制翻译是否支持表情符号和非英语文本?
Yes。ascii范围之外的字符因为通过utf-8进行编码,所以被表示为两个、三个或四个字节的正确序列,解码后重新组装成原来的表情符号,变成四个字节,往返回到同一个表情符号,而中文、阿拉伯文或带重音的拉丁文文本的工作方式相同。
在这里转换敏感文本安全吗?
是的。每次转换都运行在浏览器内的 JavaScript 中,因此您输入的任何内容都不会上传、记录或存储,并且该工具在加载后无需连接互联网即可继续工作。您可以安全地转换令牌、内部标识符或私人消息,而无需它们离开您的设备。
ASCII和UTF-8在这个工具中有什么区别?
ASCII是一个涵盖128个英文字符的7位元集合,而UTF-8是一个可变长度编码,包含了所有的ASCII加上所有其他的Unicode字符。因为UTF-8是ASCII的超集,英文文本恰好产生ASCII表会预测的字节,而重音字母、其他脚本和表情符号则得到ASCII根本无法表示的正确的多字节序列。



