【问题标题】:What is the difference between plaintext and binary data?明文数据和二进制数据有什么区别?
【发布时间】:2009-09-16 19:03:41
【问题描述】:

许多语言都有只处理“纯文本”而不​​是二进制的函数。这是否意味着只允许 ASCII 范围内的字符?

二进制只是一系列字节,是不是类似于纯文本只是一系列解释为字符的字节?那么,明文可以存储与二进制相同的数据格式/协议吗?

【问题讨论】:

  • 仅供参考,没有纯文本这样的东西。 joelonsoftware.com/articles/Unicode.html
  • 仅供参考,这种情况下的明文不是 UTF-8,它不能代表 Unicode,因为正如我之前所说,它是一系列字节,没有什么花哨的。
  • 我想我有点冷嘲热讽。毕竟,您确实包含了“纯文本”周围的引号。

标签: binary format plaintext


【解决方案1】:

纯文本是人类可读的,而二进制文件通常是人类不可读的,因为它由可打印和不可打印字符组成。

尝试使用文本编辑器(例如记事本或 vim)打开 jpeg 文件,您就会明白我的意思。

二进制文件通常以优化速度的方式构建,因为不需要解析。 纯文本文件可以手动编辑,而二进制文件则不能。

【讨论】:

  • 我希望这是 Chuck Norris 风格的 Jon Skeet 笑话的曙光。
  • 好答案,但我指的是编程上下文,只接受纯文本的函数可以存储与接受二进制的函数相同的数据格式/协议吗?
  • 问题是二进制文件没有换行符,所以很难,但并非不可能。
【解决方案2】:

“明文”可以有多种含义。

在这种情况下最有用的是它只是一个按字节序列组织的二进制文件,特定的计算机系统可以将其转换为它认为是“文本”字符的有限集合。

第二个含义,有点相关,是一个限制,即所述系统应该将这些“文本字符”显示为人类可读的符号,作为可识别字母表的成员。通常,不成文的暗示是翻译机制是 ASCII。

第三个更严格的含义是,这个系统必须是一个“简单”的文本编辑器/查看器。通常暗示 ASCII 编码。但是,实际上,您(人类)阅读以某种时髦格式编码并由专有程序显示的文本与阅读 ASCII 编码文件的 VI 文本编辑器之间几乎没有区别。

在编程上下文中,您的编程环境(由操作系统 + 系统 API + 您的语言能力组成)定义了一组“文本”字符和一组它能够读取的编码转换为这些“文本”字符。请注意,这不一定意味着 ASCII、英文或 8 位 - 例如,Perl 可以本机读取和使用完整的 Unicode“字符”集。

要回答您的具体问题,您绝对可以使用“字符”字符串来传输任意字节序列,但需要注意字符串终止约定必须适用。 问题是已经存在的“处理字符数据”的功能可能没有任何有用的功能来处理您的二进制数据。

【讨论】:

    【解决方案3】:

    这通常意味着该语言可以随意将某些控制字符(例如值 10 或 13)解释为逻辑行终止符。换句话说,输出操作可能会自动将这些字符附加到末尾,而输入操作可能会从输入中删除它们(和/或终止读取)。

    相比之下,宣传处理“二进制”数据的语言 I/O 操作通常会包含一个输入参数,用于表示要操作的数据长度,因为没有其他方法(除了读取文件末尾之外)可以知道什么时候完成。

    【讨论】:

    • 假设我提供明文的函数将其作为字符串。能不能在传输前不测量长度,而不是依赖控制字符?
    • 这取决于语言。在艾达,当然。在 C 中,唯一的方法是查找行终止符(ASCII 0)。这意味着您无法使用“ASCII”I/O 例程将该值输出到文件中,但可以使用基于长度的“二进制”例程。
    • 当然,它可能会添加一个控制字符(例如 \r\n),或者甚至对该字符串进行字符集转换,如果数据被视为二进制,则不会添加或更改任何内容.
    【解决方案4】:

    通常,这取决于语言/环境/功能。

    二进制数据始终是:二进制。原封不动地转移。

    “纯文本”模式可能意味着以下一项或多项:

    • 字节流被分成几行。行分隔符是 \r、\n 或 \r\n 或 \n\r。有时它依赖于操作系统(如 *nix 喜欢 \n,而 windows 喜欢 \r\n)。可以针对阅读应用调整行尾
    • 可以调整字符编码。环境可能会检测和/或将源编码转换为应用程序期望的编码
    • 可能应该将其他一些转换添加到此列表中,但我现在想不出更多

    【讨论】:

      【解决方案5】:

      技术上没什么。纯文本是二进制数据的一种形式。但是,主要区别在于值的存储方式。想想如何存储整数。在二进制数据中,它将使用二进制补码格式,可能占用 32 位空间。在文本格式中,数字将被存储为一系列 unicode 数字。因此,数字 50 将以二进制形式存储为 0x32(填充以占用 32 位),但以纯文本形式存储为 '5' '0'。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 2021-10-24
        • 2011-12-08
        • 1970-01-01
        • 2016-02-14
        • 2013-01-14
        • 1970-01-01
        相关资源
        最近更新 更多