如何在 Linux 上更改文本文件的字符编码
问题: 我有一个“iso-8859-1”编码的字幕文件,它在我的 Linux 系统上显示损坏的字符,我想将其文本编码更改为“utf-8”字符集。在Linux中,有什么好的工具可以转换文本文件中的字符编码?
如您所知,计算机只能处理最低级别的二进制数,而不能处理字符。保存文本文件时,该文件中的每个字符都映射为位,而这些“位”实际上存储在磁盘上。当应用程序稍后打开该文本文件时,每个二进制数字都会被读取并映射回我们人类可以理解的原始字符。当所有需要访问文本文件的应用程序“理解”其编码(即二进制数映射到字符的方式)时,最好执行此“保存并打开”过程,从而可以确保可理解数据的“往返”。
如果不同的应用程序在处理文本文件时不使用相同的编码,则在原始文件中找到特殊字符的任何地方都将显示不可读的字符。特殊字符是指不属于英语字母表的字符,例如重音字符(例如 ñ、á、ü)。
那么问题就变成了:1)我如何知道某个文本文件正在使用哪种字符编码?2)如何将其转换为我选择的其他编码?
第一步:检测文件的字符编码
为了找出文件的字符编码,我们将使用一个名为 file
的命令行工具。由于 file
命令是标准 UNIX 程序,因此我们可以在所有现代 Linux 发行版中找到它。
运行以下命令:
$ file --mime-encoding filename

第二步:找出支持的文本编码
下一步是检查您的 Linux 系统支持哪些类型的文本编码。为此,我们将使用一个名为 iconv
的工具,带有 -l
标志(小写 L),它将列出所有当前支持的编码。
$ iconv -l
iconv 实用程序是 GNU libc 库的一部分,因此它在所有 Linux 发行版中都是开箱即用的。
第三步:转换文本编码
一旦我们在 Linux 系统支持的编码中选择了目标编码,就可以运行以下命令来执行转换:
$ iconv -f old_encoding -t new_encoding filename
例如,要将 iso-8859-1
转换为 utf-8
:
$ iconv -f iso-8859-1 -t utf-8 input.txt

正如我们所演示的,了解如何一起使用这些工具,您可以修复损坏的字幕文件:
