如何在 Linux 中将文件编码转换为 UTF-8

简介:

在这篇教程中,我们将解释字符编码的含义,然后给出一些使用命令行工具将使用某种字符编码的文件转化为另一种编码的例子。最后,我们将一起看一看如何在 Linux 下将使用各种字符编码的文件转化为 UTF-8 编码。

你可能已经知道,计算机除了二进制数据,是不会理解和存储字符、数字或者任何人类能够理解的东西的。一个二进制位只有两种可能的值,也就是 0 或 1。其它的任何事物,比如字符、数据和图片,必须要以二进制的形式来表现,以供计算机处理。

简单来说,字符编码是一种可以指示电脑来将原始的 0 和 1 解释成实际字符的方式,在这些字符编码中,字符都以一串数字来表示。

字符编码方案有很多种,比如 ASCII、ANCI、Unicode 等等。下面是 ASCII 编码的一个例子。

 
  1. 字符 二进制
  2. A 01000001
  3. B 01000010

在 Linux 中,命令行工具 iconv 用来将使用一种编码的文本转化为另一种编码。

你可以使用 file 命令,并添加 -i 或 --mime 参数来查看一个文件的字符编码,这个参数可以让程序像下面的例子一样输出字符串的 mime (Multipurpose Internet Mail Extensions) 数据:

 
  1. $ file -i Car.java
  2. $ file -i CarDriver.java

在 Linux 中查看文件的编码

在 Linux 中查看文件的编码

iconv 工具的使用方法如下:

 
  1. $ iconv option
  2. $ iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile

在这里,-f 或 --from-code 表明了输入编码,而 -t 或 --to-encoding 指定了输出编码。

为了列出所有已有编码的字符集,你可以使用以下命令:

 
  1. $ iconv -l

列出所有已有编码字符集

列出所有已有编码字符集

将文件从 ISO-8859-1 编码转换为 UTF-8 编码

下面,我们将学习如何将一种编码方案转换为另一种编码方案。下面的命令将会将 ISO-8859-1 编码转换为 UTF-8 编码。

考虑如下文件 input.file,其中包含这几个字符:

 

我们从查看这个文件的编码开始,然后来查看文件内容。最后,我们可以把所有字符转换为 UTF-8 编码。

在运行 iconv 命令之后,我们可以像下面这样检查输出文件的内容,和它使用的字符编码。

 
  1. $ file -i input.file
  2. $ cat input.file
  3. $ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
  4. $ cat out.file
  5. $ file -i out.file

在 Linux 中将 ISO-8859-1 转化为 UTF-8

在 Linux 中将 ISO-8859-1 转化为 UTF-8

注意:如果输出编码后面添加了 //IGNORE 字符串,那些不能被转换的字符将不会被转换,并且在转换后,程序会显示一条错误信息。

好,如果字符串 //TRANSLIT 被添加到了上面例子中的输出编码之后 (UTF-8//TRANSLIT),待转换的字符会尽量采用形译原则。也就是说,如果某个字符在输出编码方案中不能被表示的话,它将会被替换为一个形状比较相似的字符。

而且,如果一个字符不在输出编码中,而且不能被形译,它将会在输出文件中被一个问号标记 ? 代替。

将多个文件转换为 UTF-8 编码

回到我们的主题。如果你想将多个文件甚至某目录下所有文件转化为 UTF-8 编码,你可以像下面一样,编写一个简单的 shell 脚本,并将其命名为 encoding.sh

 
  1. #!/bin/bash
  2. ### 将 values_here 替换为输入编码
  3. FROM_ENCODING="value_here"
  4. ### 输出编码 (UTF-8)
  5. TO_ENCODING="UTF-8"
  6. ### 转换命令
  7. CONVERT=" iconv -f $FROM_ENCODING -t $TO_ENCODING"
  8. ### 使用循环转换多个文件
  9. for file in *.txt; do
  10. $CONVERT "$file" -o "${file%.txt}.utf8.converted"
  11. done
  12. exit 0

保存文件,然后为它添加可执行权限。在待转换文件 (*.txt) 所在的目录中运行这个脚本。

 
  1. $ chmod +x encoding.sh
  2. $ ./encoding.sh

重要事项:你也可以使这个脚本变得更通用,比如转换任意特定的字符编码到另一种编码。为了达到这个目的,你只需要改变 FROM_ENCODING 及 TO_ENCODING 变量的值。别忘了改一下输出文件的文件名 "${file%.txt}.utf8.converted".

若要了解更多信息,可以查看 iconv 的手册页man page。

 
  1. $ man iconv

将这篇指南总结一下,理解字符编码的概念、了解如何将一种编码方案转换为另一种,是一个电脑用户处理文本时必须要掌握的知识,程序员更甚。

原文发布时间为:2017-11-15

本文来自云栖社区合作伙伴“Linux中国”

相关文章
|
17天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
71 1
|
21天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
23天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
27天前
|
Shell Linux API
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
【Shell 命令集合 备份压缩 】Linux 解压缩文件 unzip命令 使用指南
49 0
|
16天前
|
人工智能 安全 Linux
【Linux】Linux之间如何互传文件(详细讲解)
【Linux】Linux之间如何互传文件(详细讲解)
|
27天前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】Linux 创建Kickstart文件mkkickstart命令 使用指南
【Shell 命令集合 系统设置 】Linux 创建Kickstart文件mkkickstart命令 使用指南
31 0
|
27天前
|
存储 Shell Linux
【Shell 命令集合 备份压缩 】Linux 解码uuencode编码的文件 uudecode 命令 使用指南
【Shell 命令集合 备份压缩 】Linux 解码uuencode编码的文件 uudecode 命令 使用指南
29 0
|
27天前
|
安全 Shell Linux
【Shell 命令集合 备份压缩 】Linux将可执行文件压缩成gzip格式 gzexe命令 使用指南
【Shell 命令集合 备份压缩 】Linux将可执行文件压缩成gzip格式 gzexe命令 使用指南
35 0
|
27天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
48 0
|
27天前
|
存储 Shell Linux
【Shell 命令集合 备份压缩 】Linux 恢复由dump命令创建的备份文件 restore命令 使用指南
【Shell 命令集合 备份压缩 】Linux 恢复由dump命令创建的备份文件 restore命令 使用指南
31 0