(评论)
(comments)
原始链接: https://news.ycombinator.com/item?id=37981939
是的当然。 不同的文本编码以不同的二进制格式表示相同的字符。 然而,这并不意味着所有文本都已经是二进制格式的,并且我们可以直接传输或操作它。 首先,我们需要将这些二进制格式解释为文本信息,然后才能对它们执行任何其他操作。
当我们谈到“文本”时,我们指的是以特定编码表示的字符序列。 这些编码字符从源文本转换为二进制格式以进行传输或存储,但我们对该二进制格式的解释允许我们在接收或加载后将文本恢复为其原始格式。
虽然我们可以从技术上将文本定义为特定二进制格式(例如 7 位 ASCII)的同义词,但这在可能使用其他文本编码的情况下会造成不必要的混乱和复杂性。 处理各种编码中的文本变得更加复杂,特别是在处理缺乏适当支持机制的不太常见的文本编码时(正如我们在较旧的编程环境中看到的那样)。
然而,在当今的计算世界中,大多数“非文本”二进制数据实例实际上只是二进制流,除了其底层二进制结构之外,没有任何固有含义。
本质上,为了避免不必要的复杂性,我们在某些情况下将某些二进制格式解释为表示文本,无论目标二进制格式是否支持表达所呈现概念的必要功能。 因此,我们对二进制数据的感知是基于我们如何与它交互,而不是基于所述数据与文本是否具有固有或显式关系。 尽管如此,为了保持任何给定文本编码中的实际文本和二进制数据之间的区别,如果不首先将其解释为该特定编码中的文本,则不能认为二进制数据具有固有意义。
总之,在讨论文本或传输或操作文本的方法时,至关重要的是要考虑文本可能存在或传输的二进制格式,以及将每种类型的文本与每种各自的文本编码和相应的文本相关联所固有的细微差别。 二进制格式,反之亦然,而不是仅仅关注任何特定编码本身的固有性,并将其视为完全独立且专属于二进制数据的东西。 此外,为了进一步澄清有关文本和二进制数据之间关系的要点,应该注意的是,虽然当然可以以二进制格式嵌入文本,但大多数文本都以如下方式传输:
Thank you for emphasizing this. Many junior devs have been bitten by not being told early enough the difference between encryption (requires a secret to be reversed), hashing (cannot be reversed) and encoding (can always be trivially reversed).
Also good to know that while the output looks random, it follows the same entropy as the input. Ie: don't base64 encode your password to make it stronger.
reply