我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
我需要找到放在一个目录中的所有文件的编码。有没有办法找到所使用的编码?
file命令不能做到这一点。
我感兴趣的编码是ISO 8859-1。如果是其他编码,我想将文件移动到另一个目录。
当前回答
在Debian中你也可以使用:encguess:
$ encguess test.txt
test.txt US-ASCII
由于它是一个perl脚本,它可以安装在大多数系统上,通过安装perl或脚本作为独立的,如果perl已经安装。
$ dpkg -S /usr/bin/encguess
perl: /usr/bin/encguess
其他回答
在Python中,你可以使用chardet模块。
在Debian中你也可以使用:encguess:
$ encguess test.txt
test.txt US-ASCII
由于它是一个perl脚本,它可以安装在大多数系统上,通过安装perl或脚本作为独立的,如果perl已经安装。
$ dpkg -S /usr/bin/encguess
perl: /usr/bin/encguess
如果谈论的是XML文件(ISO-8859-1),其中的XML声明指定了编码:<??> . xml version="1.0" encoding="ISO-8859-1" 因此,您可以使用正则表达式(例如,使用Perl)来检查每个文件是否有这样的规范。
更多信息可以在这里找到:如何确定文本文件编码。
将ISO 8859-1编码转换为ASCII:
iconv -f ISO_8859-1 -t ASCII filename.txt
在PHP中,你可以像这样检查它:
显式指定编码列表:
php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), 'UTF-8, ASCII, JIS, EUC-JP, SJIS, iso-8859-1') . PHP_EOL;"
更准确的"mb_list_encodings":
php -r "echo 'probably : ' . mb_detect_encoding(file_get_contents('myfile.txt'), mb_list_encodings()) . PHP_EOL;"
在第一个示例中,您可以看到我使用了一个可能匹配的编码列表(检测列表顺序)。 为了得到更准确的结果,你可以使用所有可能的编码:mb_list_encodings()
注意mb_*函数需要php-mbstring:
apt-get install php-mbstring