导读
在这篇教程中,我们将解释字符编码的含意,之后给出一些使用命令行工具将使用某种字符编码的文件转化为另一种编码的反例。最后,我们将一起看一看怎样在Linux下将使用各类字符编码的文件转化为UTF-8编码。
你可能早已晓得,计算机不仅二补码数据,是不会理解和储存字符、数字或则任何人类才能理解的东西的。一个二补码位只有两种可能的值,也就是0或1,真或假,是或否。其它的任何事物linux 文件utf 8编码,例如字符、数据和图片,必需要以二补码的方式来表现,以供计算机处理。
简单来说,字符编码是一种可以指示笔记本来将原始的0和1解释成实际字符的方法,在那些字符编码中,字符都以一串数字来表示。
字符编码方案有好多种linux操作系统教程,例如ASCII、ANCI、Unicode等等。下边是ASCII编码的一个反例。
字符 二进制 A 01000001 B 01000010
在Linux中,命令行工具iconv拿来将使用一种编码的文本转化为另一种编码。
你可以使用file命令,并添加-i或--mime参数来查看一个文件的字符编码,这个参数可以让程序像下边的事例一样输出字符串的mime(MultipurposeInternetMailExtensions)数据:
$ file -i Car.java $ file -i CarDriver.java
在Linux中查看文件的编码
iconv工具的使用方式如下:
$ iconv option $ iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile
在这儿,-f或--from-code表明了输入编码,而-t或--to-encoding指定了输出编码。
为了列举所有已有编码的字符集,你可以使用以下命令:
$ iconv -l
列举所有已有编码字符集
将文件从ISO-8859-1编码转换为UTF-8编码
下边,我们将学习怎样将一种编码方案转换为另一种编码方案。下边的命令将会将ISO-8859-1编码转换为UTF-8编码。
考虑如下文件input.file,其中包含这几个字符:
� � � �
我们从查看这个文件的编码开始,然后来查看文件内容。最后,我们可以把所有字符转换为UTF-8编码。
在运行iconv命令以后,我们可以像下边这样检测输出文件的内容,和它使用的字符编码。
$ file -i input.file $ cat input.file $ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file $ cat out.file $ file -i out.file
在Linux上将ISO-8859-1转化为UTF-8
注意:假若输出编码前面添加了//IGNORE字符串,这些不能被转换的字符将不会被转换,但是在转换后,程序会显示一条错误信息。
好,假如字符串//TRANSLIT被添加到了前面事例中的输出编码以后(UTF-8//TRANSLIT),待转换的字符会尽量采用形译原则。也就是说,假如某个字符在输出编码方案中不能被表示的话,它将会被替换为一个形状比较相像的字符。
但是linux 文件utf 8编码,假若一个字符不在输出编码中,并且不能被形译,它将会在输出文件中被一个问号标记?替代。
将多个文件转换为UTF-8编码
回到我们的主题。假如你想将多个文件甚至某目录下所有文件转化为UTF-8编码,你可以像下边一样,编撰一个简单的shell脚本,并将其命名为encoding.sh:
#!/bin/bash ### 将 values_here 替换为输入编码 FROM_ENCODING="value_here" ### 输出编码 (UTF-8) TO_ENCODING="UTF-8" ### 转换命令 CONVERT=" iconv -f $FROM_ENCODING -t $TO_ENCODING" ### 使用循环转换多个文件 for file in *.txt; do $CONVERT "$file" -o "${file%.txt}.utf8.converted" done exit 0
保存文件,之后为它添加可执行权限。在待转换文件(*.txt)所在的目录中运行这个脚本。
$ chmod +x encoding.sh $ ./encoding.sh
重要事项:你也可以使这个脚本显得更通用,例如转换任意特定的字符编码到另一种编码。为了达到这个目的linux文本编辑器,你只须要改变FROM_ENCODING及TO_ENCODING变量的值。别忘了改一下输出文件的文件名"${file%.txt}.utf8.converted".