跳到主要内容

文件格式

什么是 TXT 文件?纯文本、字符编码与 UTF-8

TXT 是最简单的文档格式,只有字符和换行。然而字符编码、BOM 和换行符让它成了最容易出问题的格式之一。本文逐一讲解。

作者: Hemen Dönüştür Editör Ekibi发布日期: 阅读约 7 分钟

标有 TXT 字样的文件徽章

TXT 是计算机上最朴素的文档格式:没有粗体,没有字体,没有页面版式,只有字符和换行。正因为简单,它的可移植性极强。五十年前写的文本文件今天依然能打开,你今天写的文件几十年后也很可能照样能打开。但“纯文本”并没有看上去那么简单。重音字母变成“é”或“?”,中文变成一堆乱码,所有行挤成一行,文件开头多出一个看不见的字符:这些问题都源于 TXT 文件中一个隐藏的细节,也就是它的字符编码。本文将介绍 TXT 文件的工作原理,以及如何解决这些问题。

什么是 TXT 文件?

扩展名为 .txt 的文件只包含文本字符。没有文件头,没有元数据,也没有格式;每个字节都属于文本本身。关键的问题是:哪个字节代表哪个字符?这种对应关系称为字符编码,而 TXT 文件通常并不会说明自己使用的是哪种编码,打开它的程序只能去猜。

简要历史:从 ASCII 到 UTF-8

ASCII 于 1963 年以 ASA X3.4-1963 的形式首次发布。它使用 7 位,定义了 128 个字符:英文字母、数字、标点符号以及换行等控制字符。é、ñ、ö 这样的字母,更不用说汉字,都不在 ASCII 之内。

为了弥补这一空缺,出现了代码页,把 8 位字节剩下的 128 个值分配给不同的语言:西欧语言用 Windows-1252 和 ISO-8859-1,土耳其语用 Windows-1254 和 ISO-8859-9,诸如此类;简体中文则使用 GB2312、GBK 这类多字节编码(Windows 代码页 936)。问题在于,同一个字节在不同的代码页中代表不同的字母。例如,字节 FD 在 Windows-1252 中是“ý”,在 Windows-1254 中却是“ı”。猜错代码页的程序就会把文字显示错。

最终的解决方案是 Unicode,它为所有书写系统中的每个字符分配一个唯一的编号。UTF-8 是把这些编号转换为字节最常用的方式。据 Rob Pike 回忆,大约在 1992 年 9 月的一个晚上,Ken Thompson 在新泽西州一家餐馆的餐垫上设计出了 UTF-8。它现行的定义是 2003 年 11 月发布的 RFC 3629:UTF-8 用 1 到 4 个字节编码 U+0000 到 U+10FFFF 之间的所有字符,并且 ASCII 字符的编码与 ASCII 中的单字节完全相同。

网页能说明 UTF-8 的统治地位:根据 W3Techs 2026 年 10 月 15 日的数据,在字符编码已知的网站中,99.1% 使用 UTF-8,其次是 ISO-8859-1(0.8%)和 Windows-1252(0.2%)。

TXT 文件里面有什么?

字符与字节

把单词“café”分别保存为 UTF-8 和 Windows-1252,会得到不同的字节:

文字:           c   a   f   é
UTF-8:          63  61  66  C3 A9   (5 字节)
Windows-1252:   63  61  66  E9      (4 字节)

把 UTF-8 文件当作 Windows-1252 读取的程序,会把 C3 和 A9 显示为两个独立的字符“é”。反过来,把 Windows-1252 文件当作 UTF-8 读取的程序,会把 E9 视为无效字节并显示为“�”。几乎所有乱码问题都属于这两种情形之一。

BOM(字节顺序标记)

有些程序会在 UTF-8 文件开头写入 EF BB BF 这几个字节。这是字符 U+FEFF 的 UTF-8 形式,用作表示“本文件是 UTF-8”的签名。RFC 3629 指出,这个签名总是以这三个字节出现。根据 Unicode 常见问题解答,UTF-8 并不需要 BOM,它只起签名作用;在要求文件开头为 ASCII 字符的协议中应当避免使用。在实践中,BOM 能帮助一些旧版 Windows 程序和 Excel 识别 UTF-8,但也可能导致 Unix shell 脚本以及某些软件读取的配置文件出错。

在 UTF-16 中,BOM 更加重要,因为它告诉读取方字节顺序:FF FE 表示小端序,FE FF 表示大端序 UTF-16。

换行符

表示一行结束的字符也取决于操作系统:

系统换行符字节
WindowsCRLF0D 0A
Linux、macOSLF0A
经典 Mac OS(OS X 之前)CR0D

多年来,Windows 记事本只认识 CRLF,所以在 Linux 上写的文件会显示成长长的一行。Microsoft 于 2018 年 5 月 8 日宣布记事本支持 LF 和 CR,这一改动随 Windows 10 1809 版推送给用户。

TXT 用在哪里?

  • 笔记和草稿:不需要格式的速记。
  • 软件:README 文件、许可证文本、源代码、配置文件和日志。
  • 数据交换:在系统之间传递的简单列表和导出数据。
  • 长期保存:需要不依赖任何应用程序进行归档的文本。
  • 无障碍与文本处理:屏幕阅读器、搜索引擎和文本分析工具最干净的输入。

优点与缺点

优点:所有设备和操作系统都能打开。文件极小。不依赖程序版本,损坏的风险也很低。Git 等版本控制系统可以逐行显示变更。它不能携带宏或嵌入对象,因此很安全。

缺点:无法容纳格式、图片、表格或链接。由于编码没有记录在文件中,可能会被猜错。换行符的差异会在不同系统之间引发一些小而烦人的问题。如果需要标题和列表这样的结构,Markdown 是更好的选择。

哪些程序可以打开 TXT?

Windows 上的记事本、macOS 上的“文本编辑”以及 Linux 上的 gedit 等编辑器都能打开 TXT,浏览器也可以直接显示文本文件。Visual Studio Code、Notepad++ 和 Sublime Text 等高级编辑器会在状态栏显示编码和换行符类型,并且点一下就能更改,是诊断编码问题最实用的工具。

常见问题及解决方法

重音字符显示为“é”或“ü”

文件以 UTF-8 保存,但读取它的程序假定是 Windows-1252。请在可以选择编码的编辑器中以 UTF-8 重新打开。如果 CSV 或文本文件在 Excel 中显示成这样,另存为带 BOM 的 UTF-8 通常就能解决。

字符被替换成“?”或“�”

文件以旧的代码页(例如 GBK)保存,却被当作 UTF-8 读取。在编辑器中选择正确的代码页打开文件,然后另存为 UTF-8。如果文本保存时已经写入了真正的“?”字符,原来的字符就已丢失,需要回到源文件。

所有文字都显示在一行

旧编辑器无法识别 LF 换行符。请使用最新版的记事本或高级编辑器,或者把换行符转换为 CRLF。

文件开头有一个看不见的字符

那通常是 BOM。如果脚本或配置文件在第一行就出错,请将其另存为“UTF-8 无 BOM”。

TXT 文件转换技巧

在我们的转换器上,TXT 文件会上传到我们的服务器,并在 30 分钟内删除。编码会自动检测:首先检查 BOM(UTF-8、UTF-16 小端和大端);没有 BOM 时,检查文件是否为有效的 UTF-8;如果不是有效的 UTF-8,就按 Windows-1254(旧的土耳其语 Windows 代码页)读取。因此,GBK 等其他旧编码保存的中文文本,最好先在编辑器中另存为 UTF-8 再转换。含有大量 NUL 字节的文件会被视为二进制文件而非文本,你会看到“这不是文本文件”的提示。

  • 使用 TXT 转 Word 和 TXT 转 PDF 时,每一行都会变成一个段落,空行会保留。行首缩进(代码、诗歌或编号条款)会转换为不换行空格以免丢失,行首的制表符会变成四个空格。
  • 如果以后想用标题和列表来丰富纯文本,TXT 转 Markdown 是不错的起点。
  • 反方向上,PDF 转 TXT 和 Word 转 TXT 会去掉格式,并用空行分隔标题和段落。我们生成的 TXT 文件以带 BOM 的 UTF-8 保存,以便在记事本和 Excel 等程序中正确显示中文和带重音的字符。

常见问题

TXT 文件应该用哪种编码保存?

新文件请用 UTF-8。它支持所有语言,并且在网页上几乎已成为通用标准。如果文件将由期望无 BOM UTF-8 的软件读取,就不要加 BOM;如果要在 Excel 等程序中打开,就加上 BOM。

UTF-8 和带 BOM 的 UTF-8 有什么区别?

内容完全相同,只是带 BOM 的版本以 EF BB BF 这几个字节开头。这个签名能帮助某些程序识别编码,但在另一些程序中可能显示为一个看不见的首字符。

TXT 和 RTF 有什么区别?

TXT 只包含字符。RTF 则通过嵌入在文本中的控制命令携带粗体、斜体、字体和表格等格式。如果不需要格式,TXT 更简单,可移植性也更好。

怎样查看 TXT 文件的编码?

Visual Studio Code 和 Notepad++ 等编辑器会在状态栏显示编码。当前版本的记事本也会在状态栏显示编码和换行符类型。

TXT 文件会含有病毒吗?

纯文本文件本身不包含可执行代码。请留意“document.txt.exe”这样的双重扩展名;在 Windows 中显示文件扩展名可以帮你识破这种伎俩。

参考资料

相关转换工具

全部文章