明文和二进制数据有什么区别?

20
许多编程语言都只处理“纯文本”,而非二进制。这是否意味着仅允许使用 ASCII 范围内的字符?
二进制只是一系列字节,类似于将一系列字节解释为字符的纯文本。因此,纯文本是否能够存储与二进制相同的数据格式/协议?

4
FYI,根本没有所谓的纯文本。http://www.joelonsoftware.com/articles/Unicode.html - harpo
顺便提一下,在这个上下文中,纯文本不是UTF-8,也不能表示Unicode,因为正如我之前所说,它只是一系列字节,没有什么花哨的东西。 - Robin Rodricks
我想我有点讽刺。毕竟,你在“明文”周围加了引号。 - harpo
5个回答

13

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

尝试使用文本编辑器(例如记事本或vim)打开jpeg文件,你就会明白我说的是什么。

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


我希望这是像Chuck Norris风格的Jon Skeet笑话的黎明。 - JMP
很好的回答,但我指的是编程上下文,只接受纯文本的函数能否存储与接受二进制的函数相同的数据格式/协议? - Robin Rodricks
2
问题在于二进制文件没有换行符,所以这很困难,但并非不可能。 - Federico klez Culloca
6
@presleyster和fbrereto:请查看http://meta.stackexchange.com/questions/9134/jon-skeet-facts。 - T.E.D.

7
"Plaintext"有几个意思。
在这个上下文中,最有用的一个意思是,它只是一个二进制文件,按字节序列组织,特定计算机系统可以将其转换为一组被视为“文本”字符的有限集。
第二个意思与之有些联系,即该系统应将这些“文本字符”显示为人类可识别的符号。通常,未写明的暗示是转换机制是ASCII。
第三个更为严格的意思是,该系统必须是一个“简单”的文本编辑器/查看器。通常意味着ASCII编码。但实际上,你作为人读取某些奇怪格式编码并由专有程序显示的文本与VI文本编辑器读取ASCII编码文件之间的区别非常小。
在编程环境中,你的编程环境(包括操作系统+系统API+语言能力)定义了一组“文本”字符和一组编码,可以读取并转换为这些“文本”字符。请注意,这不一定意味着ASCII、英语或8位-例如,Perl可以本地读取和使用完整的Unicode“字符”集。
回答你的具体问题,你可以使用“字符”字符串来传输任意字节序列,但要注意字符串终止约定。
问题是,已经存在的“处理字符数据”的函数可能没有任何有用的功能来处理你的二进制数据。

5

它经常意味着语言可能会自由解释某些控制字符,例如值10或13,作为逻辑行终止符。换句话说,输出操作可能会在末尾自动附加这些字符,而输入操作可能会从输入中剥离它们(和/或在那里终止读取)。

相比之下,广告“二进制”数据的语言I/O操作通常会包括一个输入参数,用于操作数据的长度,因为除了读取文件结尾以外,没有其他方法可以知道何时完成。


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

4
一般而言,这取决于语言/环境/功能。
二进制数据始终是二进制的。它在传输时不会被修改。
“纯文本”模式可能意味着以下一项或多项:
- 字节流被拆分成行。行分隔符为\r、\n、\r\n或\n\r。有时它取决于操作系统(例如*nix喜欢\n,而Windows喜欢\r\n)。行尾可能会根据读取应用程序进行调整。 - 可能会调整字符编码。环境可能会检测和/或转换源编码为应用程序所期望的编码。 - 可能还应该将其他转换添加到此列表中,但我目前无法想到更多。

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接