Hacker News 中文摘要

RSS订阅

纯文本依然是最好的技术之一 -- Plain text is still one of the best technologies we have

很少有计算机文件格式能让人相信五十年后依然可读,纯文本却是其中之一。它虽不能嵌入表格或保留复杂版面,却以计算中最简单易懂的形式存储文本,这种简单性正是其持久的原因。统一码标准(Unicode Standard)将纯文本定义为字符码序列,不含富文本的格式信息。从用户角度看,文件包含文本本身,无需特定应用程序解读。用户可在Linux(Linux)创建文件,复制到视窗(Windows)。

正文

为什么纯文本仍是我们拥有的最好的技术之一

没有多少计算机文件格式我敢相信五十年后还能读,纯文本是其中之一。这话听起来像勉强的恭维。文本文件无法嵌入电子表格、保留精细的页面布局、运行演示文稿,也提供不了现代应用带来的许多便利。但它的做法是以计算机中最简单、最被广泛理解的形式之一存储文字,而正是这种简单让它延续至今。

几乎不会出错

Unicode 标准把纯文本基本定义为一系列字符编码,不附带富文本那种额外的格式信息。字体、颜色、布局等呈现细节属于别的地方。

从用户角度看,重要的部分更简单:文件里装的是文字本身,不需要特定应用才能理解。我可以在 Linux 上创建文本文件,复制到 Windows 机器,放到 Web 服务器,在终端里打开,用命令行工具搜索,用任意多种程序编辑,或者发给一个用完全不同系统的人。这个文件几乎不依赖它是怎么被创建的。

许多文档格式与此不同,信息与能读懂该格式的应用或应用家族紧密绑定。有时这无害,有时该格式有详细文档且被广泛支持,另一些情况下,打开一个旧文件意味着指望还有合适的软件存在。

纯文本几乎没有这种包袱。

我们一直用它,是有原因的

纯文本不是什么需要抢救的被遗忘的技术。它仍然是计算的基础管道的一部分。

源代码通常是文本。配置文件常常是文本。日志文件一般都是文本。Unix 和 Linux 系统里满是文本文件。Web 背后的许多机制也以某种形式涉及文本。HTML、XML、JSON、CSS、shell 脚本、编程语言、配置格式以及其他许多东西,都构建在人类可以查看的字符之上。

当然,这些是结构化格式,而不是普通的散文。HTML 文档和 .txt 文件里的笔记不是一回事。相似之处在于内容仍然可见。用基本的文本编辑器打开文件,你就能看到里面有什么,即使你并不理解每一部分。

这有实际价值。当文本配置文件出问题时,我可以直接查看它、复制它、比较版本、搜索某个设置,或者备份,而不需要创建它的那个程序。在正常应用之外仍然可读的数据,排查和保存起来要容易得多。

纯文本与别人配合得好

纯文本最大的优势之一,是已有大量工具知道怎么处理它。

在类 Unix 系统上,一个文本文件可以交给 grep、sed、awk、sort、diff 以及许多已经存在了几十年的实用程序。脚本可以处理成千上万个文件,而不必假装自己是一个点菜单的人。

优势不限于命令行。图形编辑器、编程环境、笔记应用、文件管理器、搜索工具、浏览器以及无数其他程序也能处理文本。真正的优势在于,信息并不紧紧绑定在某一个界面上。

现代软件往往反其道而行。一个应用可能决定你的信息存在哪里、如何组织、如何同步、如何搜索,以及允许哪些其他软件碰它。这些系统能提供有用的功能,但也让应用越来越成为数据的中心。

纯文本把更多这类选择留给了用户。

Markdown 找到了有用的中间地带

纯文本明显的弱点是格式。标题、强调、链接、列表、引用和其他结构让文档更易读,而一个基本的 .txt 文件没有表达其中大部分内容的标准方式。

Markdown 是一个实用的折中。它是一种用于结构化文档的纯文本格式,借鉴了电子邮件和 Usenet 中早已熟悉的惯例。它于 2004 年推出,如今它的各种变体被用于软件文档、网站、笔记、书籍和许多其他类型的写作。

它真正的优势在于,即使 Markdown 处理器消失了,源文件仍然有用。标题看起来仍然像标题。项目符号列表仍然像列表。链接仍然同时包含描述和目标。格式语法是可见的,而不是被埋在二进制结构里。

这是在不放弃纯文本主要优势的前提下增加有用能力的好例子。渲染后的输出可能很方便,但源文件仍然是普通文本。

文本的老化情况出奇地好

寿命长可能是纯文本最有力的论据。

计算机历史满是废弃的文件格式和应用。有时恢复一份旧文档意味着找到过时的软件、找到导入过滤器、运行模拟器,或者通过好几种中间格式转换。

文本文件并非完全不受兼容性问题影响。较旧的文件可能有字符编码问题,而行尾的差异多年来也一直让人烦恼。但和从某 obscure 的专有格式中恢复信息相比,这些问题通常还是可控的。

如果我找到一个旧的文本文件,当前电脑上很可能有某个程序能打开它。即使格式粗糙或编码需要处理,文字本身一般是能恢复的。

现代 Unicode 也让纯文本的能力远超过去那种只含英文字母、数字和标点的 ASCII 文本。今天的纯文本可以表示世界各地的书写系统和字符,同时保留同样的基本理念:文件里装的是编码字符,而不是专有的呈现格式。

简单不等于原始。

它也容易自己拥有

随着软件转向账户、云存储、同步服务和订阅制,纯文本的优势变得更加明显。

一个文本文件可以只是待在我电脑上的某个目录里。我可以把它和其他文件一起备份,按自己的方式同步,放进版本控制,复制到另一台机器,或存到我控制的服务器上。这些都不需要制作我编辑器的那家公司继续经营或继续支持某项服务。

这并不说明每个笔记服务或云应用都是坏主意。专业应用提供了纯文本自身难以轻易提供的功能。协作、数据库、嵌入媒体、复杂格式以及不同种类信息之间的关系,都有正当用途。

把每种数据都塞进 .txt 文件没有好处。有用的区分在于,额外的复杂度是解决了真实问题,还是仅仅变成又一层依赖。

当纯文本足够时,它会去掉相当多日后可能碍事的东西。

局限是真实存在的

纯文本不是万能的。

我不想用一段文字描述像素来取代一张照片,也不想把一份财务工作簿变成一堆需要我手动重建所有公式的数字。富文档之所以存在,就是因为呈现和结构有时确实重要。

应用也提供有用的抽象。数据库能强制实行一堆文本文件做不到的关系。文字处理器能处理手动复制会很烦人的页面布局。专业软件的存在有充分的理由。

问题不在于使用更丰富的工具,而在于即使工作并不需要,也假定更丰富的工具自动更好。在相当多的情况下,最简单且够用的表示仍然是最持久的。

无聊是一个特性

纯文本属于那种因为可靠工作而几乎变得隐形的技术。没有公司试图提升它的参与度,没有账户要求,没有订阅层级,也没有哪种服务会在商业模式改变时被关停。

它便携、可查看、可搜索、可脚本化、容易备份,而且出奇地抗过时。这些品质不令人兴奋,但有用,尤其是在长时段里。

看了几十年软件和文件格式来来去去之后,我对那些做得更少、活得更久的技术有了相当的敬意。纯文本并不解决所有问题,也不应该。它提供的是一种稳定的信息存储方式,对周围软件的要求极少。

对如此基础的东西来说,这是相当了不起的成就。

评论

讨论整体认同纯文本在长期可读性和可移植性上的优势,但分歧在于它到底有多「纯」——一派把它当作能跨越五十年的终极格式,另一派指出编码、换行和 Unicode 控制字符让纯文本充满隐性约定;另有一派认为 AI agent 已经让「格式失传」的担忧失去意义,还有人对文章本身是否为 AI 生成提出质疑。

认为纯文本的持久性源于它无法被任何人拥有

  • 文本是最强大的通信技术,而它能长期存活的关键在于不归任何个人或公司所有(较多人) > 因为没有任何个人或实体能拥有它。(@leftnode)
  • 纯文本可以编码任何被蒸馏过的数据形式,连 DNA 都可以视作文本(少数人)
  • 早期用纯文本做剧本和文档,写作用的软件早已废弃、文件打不开,纯文本文件却仍然在(少数人)

认为「纯文本」远没有看上去那么纯粹

  • ASCII 七位是唯一被广泛理解的字符集,Unicode 是多字节、变长且涉及字节序,读错长度或猜错编码结果就毫无用处(较多人)
  • 文章称纯文本只含字符码、不含格式信息,但 Unicode 包含肤色修饰符、来自 ASCII 的控制字符,以及大量名为「布局控制」的字符(较多人)
  • 换行方式历史上就有 \n、\r\n、\r、\n\r 多种,且 POSIX 把换行看作「终止」而微软看作「分隔」,这会影响 cat 这类工具的拼接行为(较多人)
  • 日常写作仍坚持纯 ASCII,因为这是避免意外乱码的唯一办法(少数人) > 我写的大部分文本文件仍保持纯 ASCII,因为这是唯一能避免意外故障的方式。(@drhagen)

认为 AI 时代削弱了「格式会失传」的担忧

  • agent 可以自己写工具解析任意二进制格式,已经有人用模型直接读十年前的专有文件;二进制格式的可维护性比过去任何时候都好(较多人)
  • 文本在 AI 时代反而获得一次提振(少数人) > 我觉得文本正在从 AI 时代获得很大推动。(@m463)

认为 Markdown 是被过度拉伸的中间态

  • Markdown 本是为 HTML 设计的简写,却被拿去承担其他用途;很多场景下纯文本或所见即所得更实用,而 Markdown 还鼓励人们在格式细节上浪费时间(较多人)
  • 让模型生成内容时更愿意要 .txt 而不是 .md,因为 Markdown 的排版往往失控;.md 流行可能只是因为 agent 需要利用它的标题层级(少数人)
  • 曾因强制用 Markdown 加代码评审写内部文档,导致文档严重过期,改用在线文档后反而更全更新(少数人)

认为纯文本的优势在存档场景中最实在

  • 二十年前就推动科学数据仓库以纯文本归档,人类可读且利于长期保存,但二维图像数据体积过大,至今没找到优雅方案(少数人)

质疑这篇文章本身就是 AI 生成

  • 有人把开头几段放进检测工具,判定为 100% AI 生成,于是不再阅读,并认为这类内容不该被推到 HN 首页(较多人) > 把前三段贴进检测工具,结果 100% 是 AI 生成的。不读了。(@mythrilkey30)

有价值的补充

  • 换行符的历史比想象中乱:老文件里出现过 \r\n、\r、\n\r 三种变体,编码问题至今缺一个好用的启发式识别并转 UTF-8 的工具。
  • Godot 用文本描述场景,和 Unreal 的二进制蓝图格式形成鲜明对比,是「文本优先」在游戏引擎里的现实案例。
  • ledger 和 hledger 把个人记账完全放在纯文本里,是纯文本在结构化数据领域少见的成功实践。
  • Base64 可以说是「万物皆文本」的极端形态,连本不该是文本的东西也能编码成文本,而且相对而言还算省空间。
  • 有人提到 Dylan Beattie 的演讲《Plain text? Really?》,正好讲清了这种「看似简单」的东西背后的坑。