Linux系统查找替换非UTF-8编码文件的方法

UTF-8是Linux系统下的一种可变长度的字符万国码 , 使用UTF-8码就可以支持多种语言 。但是某些文件并不是UTF-8编码的 , 这个时候我们可以用命令来查找替换非UTF-8码 , 下面就来介绍一下Linux系统查找替换非UTF-8编码文件的方法 。

Linux系统查找替换非UTF-8编码文件的方法


开始之前 , 请先安装enca这个软件包 。enca是Linux等系统下用来查看文件编码和转换文件编码的工具 。
下面一行Linux命令能够查找当前目录下所有文件中 , 哪些文件不是UTF-8编码 。我对文件加了些限制 , 用find命令时候 , 排除了所有目录下的.svn目录 , 且只查找后缀为.php的文件 。
【Linux系统查找替换非UTF-8编码文件的方法】命令1:
jw@~/sqlite>
find。! -iregex ‘.*\.svn.*’ -type f -name ‘*.php’ -exec bash -c “enca -L zh_CN {}|grep GB2312 》 /dev/null && echo {}” \;
./sqlite_utility.php
./sqlite_result.php
./sqlite_forge.php
./sqlite_driver.php
既然找到了这些非UTF8编码的文件 , 接下来再用一条命令将他们都转换成UTF8编码 。
命令2:
jw@~/sqlite>
find . ! -iregex ‘.*\.svn.*’ -type f -name ‘*.php’ -exec bash -c “enca -L zh_CN {} | grep GB2312 》/dev/null && enconv -L zh_CN -x UTF-8 {}” \;
当你用命令2 全部转换完成后 , 如果你期待命令1的输出为空 , 那么你就错了 。实际上英语字母的utf8编码和ASCII编码是一样的 。当一个全是英文字母的文件用UTF8 w/o BOM编码保存 , 那么enca会识别他是一个ACSII编码的文件 。所以 , 你猜到了 , 命令2做了一些无用功 。
以上就是Linux系统查找替换非UTF-8编码文件的方法了 , 这样一来就不用担心Linux文件不是UTF-8编码而无法显示其他语言了 。

    推荐阅读